const {encrypt, decrypt} = require('lib/crypt') const mongoose = require('mongoose') const noteSchema = new mongoose.Schema({ content: {type: String, required: true, minlength: 1}, }) noteSchema.statics.getNote = async (id) => { const note = await Note.findById(id) if (!note) throw new Error('Could not fetch note') const content = decrypt(note.content) return {...note, content} } noteSchema.statics.updateNote = async (id, content) => { const note = await Note.findByIdAndUpdate(id, {content: encrypt(content)}, {new: true}) if (!note) throw new Error('Could not update note') return {...note, content} } noteSchema.pre('save', async function(next){ const note = this; if (note.isModified('content')) { note.content = await encrypt(note.content) } next() }) const Note = mongoose.models.Note || mongoose.model('Note', noteSchema) export default Note