diff options
Diffstat (limited to 'pages/api/notes.js')
-rw-r--r-- | pages/api/notes.js | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/pages/api/notes.js b/pages/api/notes.js new file mode 100644 index 0000000..73a7217 --- /dev/null +++ b/pages/api/notes.js @@ -0,0 +1,101 @@ +import dbConnect from 'lib/dbConnect' +import withSession from 'lib/withSession' +import NoteList from 'models/NoteList' +import Note from 'models/Note' + +export default withSession(async (req, res) => { + await dbConnect() + + switch (req.method) { + case 'GET': + try { + const user = req.session.get('user') + + if (!user || !user.isVerified) { + throw new Error('Something went wrong') + } + + const {notes} = await NoteList.findById(user.noteList) + + res.status(200).json(notes) + } catch (error) { + res.status(400).json([]) + } + break + case 'POST': + try { + const user = req.session.get('user') + const {title, content} = req.body + + if (!user || !user?.isVerified || !content) { + throw new Error('Something went wrong') + } + + const note = await Note.create({content}) + + const noteList = await NoteList.findById(user.noteList) + noteList.notes.push({title: title ? title : 'No title', noteId: note}) + await noteList.save() + + res.status(200).json(noteList.notes) + } catch (error) { + res.status(400).json([]) + } + break + case 'DELETE': + try { + const user = req.session.get('user') + const {_id} = req.body + + if (!user || !user?.isVerified || !_id) { + throw new Error('Something went wrong') + } + + const noteList = await NoteList.findById(user.noteList) + const noteId = noteList.notes + .find(n => n._id.toString() === _id.toString()).noteId + + if (!noteList || !noteId) { + throw new Error('Something went wrong') + } + + await Note.findByIdAndDelete(noteId) + + noteList.notes.pull(_id) + await noteList.save() + + res.status(200).json(noteList.notes) + } catch (error) { + res.status(400).json([]) + } + break + case 'PUT': + try { + const user = req.session.get('user') + const {_id, title, noteId, content} = req.body + + if (!user || !user?.isVerified || !_id || !content) { + throw new Error('Something went wrong') + } + + await Note.findByIdAndUpdate(noteId, {content}, {new: true}) + + const notes = await NoteList.findOneAndUpdate( + { _id: user.noteList, "notes.noteId": noteId }, + { $set: { "notes.$.title": title ? title : 'No title' } }, + { new: true } + ) + + res.status(200).json(notes) + } catch (error) { + console.log(error) + res.status(400).json([]) + } + break + default: + res.status(400).send() + break + } +}) + + |