const express = require('express') const { model: Users } = require('../models/Users') const auth = require('../middlewares/auth') const routes = express.Router() // User create (signup) routes.post('/signup', async (req, res) => { const newUser = req.body const fieldsToAdd = Object.keys(newUser) const fieldsInModel = ['name', 'email', 'password'] const isAdditionAllowed = fieldsToAdd.every((field) => fieldsInModel.includes(field)) if (!isAdditionAllowed) { return res.status(400).send({ error: 'Invalid fields to Add!' }) } try { const user = await Users(newUser) await user.save() res.send({ user }) } catch (e) { res.status(400).send(e) } }) // check if previously loggeding routes.post('/init', auth, async (req, res) => { try { const cookieOptions = { httpOnly: true, }; const { token, user } = req if (token && user) { res.cookie('todo-jt', req.token, cookieOptions).send({ user, token }) } } catch (e) { res.status(400).send() } }) // Login user routes.post('/login', async (req, res) => { try { const cookieOptions = { httpOnly: true, }; const user = await Users.findByCredentials(req.body.email, req.body.password) const token = await user.generateAuthToken() res.cookie('todo-jt', token, cookieOptions).send({ user, token }) } catch (e) { res.status(400).send() } }) //logout user routes.post('/logout', auth, async (req, res) => { try { const { user, token } = req user.tokens = user.tokens.filter((t) => t.token !== token) await user.save() res.clearCookie('todo-jt') res.send() } catch (e) { res.status(400).send() } }) module.exports = routes