From e3d6f53e0e8e197e19bef06585c8fffc2a4bc979 Mon Sep 17 00:00:00 2001 From: Aidan Jenkins Date: Tue, 7 Dec 2021 16:26:57 -0800 Subject: [PATCH] complete mvp --- api/middleware/middleware.js | 34 ++++++++++++++++++- api/server.js | 5 +++ api/users/users-router.js | 65 +++++++++++++++++++++++++++++++----- index.js | 8 +++++ package-lock.json | 1 - 5 files changed, 103 insertions(+), 10 deletions(-) diff --git a/api/middleware/middleware.js b/api/middleware/middleware.js index 0cceb716a..3e41c6b6c 100644 --- a/api/middleware/middleware.js +++ b/api/middleware/middleware.js @@ -1,17 +1,49 @@ +const User = require('../users/users-model.js') + function logger(req, res, next) { // DO YOUR MAGIC + console.log(req.url, req.method) + next() } -function validateUserId(req, res, next) { +async function validateUserId(req, res, next) { // DO YOUR MAGIC + try { + const { id } = req.params + const user = await User.getById(id) + if(!user){ + res.status(404).json("user not found") + } else { + req.user = user + next() + } + } catch (error) { + res.status(500).json({ message: error.message}) + } } function validateUser(req, res, next) { // DO YOUR MAGIC + if(!req.body.name){ + res.status(400).json("missing required name field") + } else { + next() + } } function validatePost(req, res, next) { // DO YOUR MAGIC + if(!req.body.text){ + res.status(400).json("missing required text field") + } else { + next() + } } +module.exports = { + logger, + validateUserId, + validateUser, + validatePost +} // do not forget to expose these functions to other modules diff --git a/api/server.js b/api/server.js index badc3026a..f346387ae 100644 --- a/api/server.js +++ b/api/server.js @@ -1,6 +1,11 @@ const express = require('express'); +const userRouter = require('./users/users-router.js') +const { logger } = require('./middleware/middleware.js') const server = express(); +server.use(express.json()) +server.use(logger) +server.use('/api/users', userRouter) // remember express by default cannot parse JSON in request bodies diff --git a/api/users/users-router.js b/api/users/users-router.js index 9d8a0e278..694ac5a9d 100644 --- a/api/users/users-router.js +++ b/api/users/users-router.js @@ -1,4 +1,6 @@ -const express = require('express'); +const express = require('express') +const Users = require('../users/users-model'); +const { validateUserId, validateUser, validatePost } = require('../middleware/middleware.js') // You will need `users-model.js` and `posts-model.js` both // The middleware functions also need to be required @@ -7,38 +9,85 @@ const router = express.Router(); router.get('/', (req, res) => { // RETURN AN ARRAY WITH ALL THE USERS + Users.get(req.query) + .then(users => { + res.status(200).json(users) + }) + .catch(error => { + res.status(500).json({ message: error.message}) + }) }); router.get('/:id', (req, res) => { // RETURN THE USER OBJECT // this needs a middleware to verify user id + const { id } = req.params + User.getById(id) + .then(user => { + res.status(200).json(user) + }) + .catch(error => { + res.status(500).json({ message: error.message}) + }) }); -router.post('/', (req, res) => { +router.post('/', validatePost, (req, res) => { // RETURN THE NEWLY CREATED USER OBJECT // this needs a middleware to check that the request body is valid + Post.insert(req.body) + .then(post => { + res.status(201).json(post) + }) + .catch(error => { + res.status(500).json({ message: error.message}) + }) }); -router.put('/:id', (req, res) => { +router.put('/:id', validateUserId, validateUser, (req, res) => { // RETURN THE FRESHLY UPDATED USER OBJECT // this needs a middleware to verify user id // and another middleware to check that the request body is valid + const changes = req.body; + User.update(req.params.id, changes) + .then(user => { + if(user){ + res.status(200).json(user) + } else { + res.status(404).json({ message: 'The user could not be found' }) + } + }) + .catch(error => { + res.status(500).json({ message: error.message}) + }) }); -router.delete('/:id', (req, res) => { +router.delete('/:id', validateUserId, (req, res) => { // RETURN THE FRESHLY DELETED USER OBJECT // this needs a middleware to verify user id + const id = req.params.id + User.remove(id) + .then(() => { + res.status(200).json({ message: 'User has been deleted' }) + }) + .catch(error => { + res.status(500).json({ message: error.message}) + }) }); -router.get('/:id/posts', (req, res) => { +router.get('/:id/posts', validateUserId, (req, res) => { // RETURN THE ARRAY OF USER POSTS // this needs a middleware to verify user id + User.getUserPosts(req.params.id) + .then(posts => { + res.status(200).json(posts) + }) + .catch(error => { + res.status(500).json({ message: 'Error getting posts from user' }) + }) }); router.post('/:id/posts', (req, res) => { - // RETURN THE NEWLY CREATED USER POST - // this needs a middleware to verify user id - // and another middleware to check that the request body is valid }); +module.exports = router // do not forget to export the router diff --git a/index.js b/index.js index 602039f1b..d6d45c9a9 100644 --- a/index.js +++ b/index.js @@ -1 +1,9 @@ // require your server and launch it + +const server = require('./api/server.js'); + +const port = 3000; + +server.listen(port, () => { + console.log(`\n*** Server Running on http://localhost:${port} ***\n`); +}); diff --git a/package-lock.json b/package-lock.json index d22b61710..55c865284 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,6 @@ "requires": true, "packages": { "": { - "name": "node-api3-project", "version": "1.0.0", "dependencies": { "express": "^4.17.1",