/* eslint-disable no-unused-vars */ require('dotenv').config() const express = require('express') const app = express() const cors = require('cors') const morgan = require('morgan') const Phonebook = require('./models/phonebook') app.use(cors()) app.use(express.json()) app.use(express.static('build')) morgan.token('body', function (req, res) { return req.method === 'POST' ? JSON.stringify(req.body) : '' }) app.use( morgan(':method :url :status :res[content-length] - :response-time ms :body') ) app.get('/api/persons', (req, res) => { Phonebook.find({}).then(result => { res.json(result) }) }) app.get('/info', (req, res) => { Phonebook.find({}).then(result => { res.send(`

Phonebook has info for ${result.length} people

${Date()}

`) }) }) app.get('/api/persons/:id', (req, res, next) => { Phonebook.findById(req.params.id) .then(result => { if (result) { res.json(result) } else { res.status(404).end() } }) .catch(error => next(error)) }) app.put('/api/persons/:id', (req, res, next) => { const { name, number } = req.body Phonebook.findByIdAndUpdate( req.params.id, { name, number }, { new: true, runValidators: true, context: 'query' } ) .then(updatedPerson => { res.json(updatedPerson) }) .catch(error => next(error)) }) app.delete('/api/persons/:id', (req, res, next) => { Phonebook.findByIdAndRemove(req.params.id) .then(() => { res.status(204).end() }) .catch(error => next(error)) }) app.post('/api/persons', (req, res, next) => { const { name, number } = req.body if ( name || number) { return res.status(400).json({ error: 'name or number is missing', }) } const phonebook = new Phonebook({ name: name, number: number, }) phonebook.save().then(result => { res.json(result) }).catch(error => next(error)) }) const unknownEndpoint = (req, res) => { res.status(404).send({ error: 'unknown endpoint' }) } app.use(unknownEndpoint) const errorHandler = (error, res, next) => { console.error(error.message) if (error.name === 'CastError') { return res.status(400).send({ error: 'malformatted id' }) } else if (error.name === 'ValidationError') { return res.status(400).json({ error: error.message }) } next(error) } app.use(errorHandler) const PORT = process.env.PORT app.listen(PORT, () => { console.log(`Server running on port ${PORT}`) })