Newer
Older
const express = require('express');
const { model: ToDos } = require('../models/Todos');
const auth = require('../middlewares/auth');
const routes = express.Router();

Lucendio
committed
routes.post('/todo/add', auth, async (req, res) => {
const newTodo = req.body;

Lucendio
committed
const fieldsToAdd = Object.keys(newTodo);
const fieldsInModel = ['title', 'description'];
const isAdditionAllowed = fieldsToAdd.every((field) => fieldsInModel.includes(field));

Lucendio
committed
if (!isAdditionAllowed) {
return res.status(400).send({ error: 'Invalid fields to Add!' });

Lucendio
committed
}
try {
const todo = await ToDos({
...newTodo,
user: req.user._id,

Lucendio
committed
await todo.save();

Lucendio
committed
res.send({ todo });

Lucendio
committed
}
catch (e) {
res.status(400).send(e);

Lucendio
committed
}

Lucendio
committed
routes.post('/todo/list', auth, async (req, res) => {
try {
const todos = await ToDos.find({
user: req.user._id

Lucendio
committed
res.send(todos);

Lucendio
committed
}
catch (e) {
res.status(500).send;

Lucendio
committed
}

Lucendio
committed
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));

Lucendio
committed
if (!isUpdateAllowed) {
return res.status(400).send({ error: 'Invalid fields to update!' });

Lucendio
committed
}
const updateObj = {};
if (changedTodo.hasOwnProperty('important')) {
updateObj.important = changedTodo.important;

Lucendio
committed
}
if (changedTodo.hasOwnProperty('done')) {
updateObj.done = changedTodo.done;

Lucendio
committed
}
try {
const todo = await ToDos.findByIdAndUpdate(
{
_id: changedTodo._id,
user: req.user._id,
},

Lucendio
committed
updateObj,
{ new: true, runValidators: true }
);

Lucendio
committed
if (!todo) {
return res.status(404).send();
}

Lucendio
committed
res.send(todo);

Lucendio
committed
} catch (e) {
res.status(400).send(e);

Lucendio
committed
}

Lucendio
committed
routes.delete('/todo/delete', auth, async (req, res) => {
try {
const todo = await ToDos.findById(req.body._id);

Lucendio
committed
await todo.remove();
res.send(todo);

Lucendio
committed
} catch (e) {
res.status(500).send();

Lucendio
committed
}

Lucendio
committed
module.exports = routes;