const express = require('express') const { model: ToDos } = require('../models/Todos') const auth = require('../middlewares/auth') const routes = express.Router() routes.post('/todo/add', auth, async (req, res) => { const newTodo = req.body const fieldsToAdd = Object.keys(newTodo) const fieldsInModel = ['title', 'description'] const isAdditionAllowed = fieldsToAdd.every((field) => fieldsInModel.includes(field)) if (!isAdditionAllowed) { return res.status(400).send({ error: 'Invalid fields to Add!' }) } try { const todo = await ToDos({ ...newTodo, user: req.user._id, }) await todo.save() res.send({ todo }) } catch (e) { res.status(400).send(e) } }) routes.post('/todo/list', auth, async (req, res) => { try { const todos = await ToDos.find({ user: req.user._id }) res.send(todos) } catch (e) { res.status(500).send } }) routes.patch('/todo/update', auth, async (req, res) => { const changedTodo = req.body const fieldsToUpdate = Object.keys(changedTodo) const fieldsInModel = ['_id', 'important', 'done'] const isUpdateAllowed = fieldsToUpdate.every((field) => fieldsInModel.includes(field)) if (!isUpdateAllowed) { return res.status(400).send({ error: 'Invalid fields to update!' }) } const updateObj = {} if (changedTodo.hasOwnProperty('important')) { updateObj.important = changedTodo.important } if (changedTodo.hasOwnProperty('done')) { updateObj.done = changedTodo.done } try { const todo = await ToDos.findByIdAndUpdate({ _id: changedTodo._id, user: req.user._id, }, updateObj, { new: true, runValidators: true }) if (!todo) { return res.status(404).send() } res.send(todo) } catch (e) { res.status(400).send(e) } }) routes.delete('/todo/delete', auth, async (req, res) => { try { const todo = await ToDos.findById(req.body._id) await todo.remove() res.send(todo) } catch (e) { res.status(500).send() } }) module.exports = routes