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.updateNote(noteId, content) 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 } })