aboutsummaryrefslogtreecommitdiffstats
path: root/apps/Notes/models/NoteList.js
diff options
context:
space:
mode:
authorGravatar piotrruss <mail@pruss.it> 2021-09-09 23:23:53 +0200
committerGravatar piotrruss <mail@pruss.it> 2021-09-09 23:23:53 +0200
commita863c77ea12a4c7060b9c496e5df81bbdcca2374 (patch)
tree8d38ebc21928fa973235d8829bf1c6f7d65028df /apps/Notes/models/NoteList.js
parent569bdb8c5d7538fa0ea8a99ff2f8376f7cbfa51a (diff)
downloadmy_apps-a863c77ea12a4c7060b9c496e5df81bbdcca2374.tar.gz
my_apps-a863c77ea12a4c7060b9c496e5df81bbdcca2374.tar.bz2
my_apps-a863c77ea12a4c7060b9c496e5df81bbdcca2374.zip
add db transactions, move db models
Diffstat (limited to 'apps/Notes/models/NoteList.js')
-rw-r--r--apps/Notes/models/NoteList.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/apps/Notes/models/NoteList.js b/apps/Notes/models/NoteList.js
new file mode 100644
index 0000000..0af648a
--- /dev/null
+++ b/apps/Notes/models/NoteList.js
@@ -0,0 +1,68 @@
+const { encrypt, decrypt } = require('helpers/crypt')
+const mongoose = require('mongoose')
+
+const decryptTitles = l => ({ notes: l.notes.map(n => ({ ...n, title: decrypt(n.title) })) })
+
+const noteListSchema = new mongoose.Schema({
+ notes: [{
+ title: {
+ type: String,
+ maxlength: 1000,
+ required: true
+ },
+ noteId: {
+ type: mongoose.Schema.Types.ObjectId,
+ ref: 'Note',
+ required: true
+ },
+ created_at: { type: Date, default: Date.now },
+ updated_at: { type: Date, default: Date.now }
+ }]
+})
+
+noteListSchema.statics.getList = async (id) => {
+ const newList = await NoteList.findById(id).lean()
+
+ return { notes: newList.notes.map(n => ({ ...n, title: decrypt(n.title) })) }
+}
+
+noteListSchema.statics.getNoteId = async (_id, id) => {
+ const noteList = await NoteList.findById(_id).lean()
+ return noteList.notes
+ .find(n => n._id.toString() === id.toString()).noteId
+}
+
+noteListSchema.statics.addNote = async (_id, noteId, title) => {
+ const noteList = await NoteList.findOneAndUpdate(
+ { _id }, { $push: { notes: { title: encrypt(title || 'no title'), noteId } } }, { new: true }
+ ).lean()
+
+ return decryptTitles(noteList)
+}
+
+noteListSchema.statics.removeNote = async (_id, id) => {
+ const noteList = await NoteList.findOneAndUpdate(
+ { _id }, { $pull: { notes: { _id: id } } }
+ ).lean()
+
+ return decryptTitles(noteList)
+}
+
+noteListSchema.statics.updateList = async (_id, noteId, title) => {
+ const noteList = await NoteList.findOneAndUpdate(
+ { _id, 'notes.noteId': noteId },
+ {
+ $set: {
+ 'notes.$.title': encrypt(title || 'No title'),
+ 'notes.$.updated_at': Date.now()
+ }
+ },
+ { new: true }
+ ).lean()
+
+ return decryptTitles(noteList)
+}
+
+const NoteList = mongoose.models.NoteList || mongoose.model('NoteList', noteListSchema)
+
+export default NoteList