const blogsRouter = require('express').Router() const Blog = require('../models/blog') blogsRouter.get('/', async (request, response) => { const blogs = await Blog.find({}).populate('user', { username: 1, name: 1 }) response.json(blogs) }) blogsRouter.post('/', async (request, response) => { const body = request.body const user = request.user if (!user) return response.status(401).json({ error: 'token invalid' }) const blog = await (new Blog({ title: body.title, author: body.author, url: body.url, likes: body.likes || 0, user: user._id })).save() user.blogs = user.blogs.concat(blog._id) await user.save() response.status(201).json(blog) }) blogsRouter.get('/:id', async (request, response) => { const blog = await Blog.findById(request.params.id) if (blog) response.json(blog) else response.status(404).end() }) blogsRouter.delete('/:id', async (request, response) => { const user = request.user const blog = await Blog.findById(request.params.id) if (!blog) return response.status(404).end() if (blog.user.toString() !== user._id.toString()) { return response.status(401).json({ error: 'token invalid' }) } await Blog.findByIdAndRemove(request.params.id) response.status(204).end() }) blogsRouter.put('/:id', async (request, response) => { const body = request.body const blog = await Blog.findByIdAndUpdate(request.params.id, { title: body.title, author: body.author, url: body.url, likes: body.likes }, { new: true }) response.status(200).json(blog) }) module.exports = blogsRouter