diff --git a/index.js b/index.js index 5b30cab07..bac70e20c 100644 --- a/index.js +++ b/index.js @@ -1 +1,6 @@ // code away! +const server = require('./server.js'); + +server.listen(4000, () => { + console.log('\n* Server Running on http://localhost:4000 *\n'); +}); \ No newline at end of file diff --git a/package.json b/package.json index d87f90800..7a7903fa5 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,9 @@ "homepage": "https://github.com/LambdaSchool/node-api3-project#readme", "dependencies": { "express": "^4.17.1", + "helmet": "^4.0.0", "knex": "^0.21.2", + "morgan": "^1.10.0", "sqlite3": "^5.0.0" }, "devDependencies": { diff --git a/server.js b/server.js index cedbcc746..74346cac0 100644 --- a/server.js +++ b/server.js @@ -1,13 +1,28 @@ -const express = require('express'); +const express = require("express"); +const helmet = require("helmet"); const server = express(); -server.get('/', (req, res) => { - res.send(`

Let's write some middleware!

`); +server.use(express.json()); +server.use(helmet()); +// server.use(logger); + +const usersRouter = require("./users/userRouter"); +const postsRouter = require("./posts/postRouter"); + +server.use("/api/users", usersRouter); +server.use("/api/posts", postsRouter); + +server.get("/", (req, res) => { + res.send(`

Let"s write some middleware!

`); }); //custom middleware -function logger(req, res, next) {} +function logger(req, res, next) { + let timeStamp = new Date().toLocaleDateString; + console.log(`Method: ${req.method} / URL: ${req.url} / Time: ${timeStamp}`); + next(); +} module.exports = server; diff --git a/users/userRouter.js b/users/userRouter.js index 3bb2a79c0..7b3aba3d9 100644 --- a/users/userRouter.js +++ b/users/userRouter.js @@ -1,47 +1,142 @@ const express = require('express'); - const router = express.Router(); +const Users = require("./userDb.js"); +const Posts = require("./../posts/postDb.js"); +// const user = { +// id: "", +// name: "" +// } +// const users = []; -router.post('/', (req, res) => { - // do your magic! +router.post("/", validateUser, async (req, res) => { + try { + const newUser = await Users.insert(req.body); + if (newUser) { + res.status(201).json(newUser) + } else { + res.status(500).json({ message: "unable to add user" }); + } + } catch (error) { + res.status(500).json({ error: error.message }); + } }); -router.post('/:id/posts', (req, res) => { +router.post('/:id/posts', validateUserId, validatePost, async (req, res) => { // do your magic! + try { + const newPost = await Posts.insert({ user_id:req.params.id, ...req.body }); + if (newPost) { + res.status(201).json(newPost) + } else { + res.status(500).json({ message: "unable to add post" }); + } + } catch (error) { + res.status(500).json({ error: error.message }); + } }); -router.get('/', (req, res) => { +router.get('/', async (req, res) => { // do your magic! + try { + const getUsers = await Users.get(); + if (getUsers.length > 0) { + res.status(201).json(getUsers) + } else { + res.status(500).json({ message: "no users yet" }); + } + } catch (error) { + res.status(500).json({ error: error.message }); + } }); -router.get('/:id', (req, res) => { +router.get('/:id', validateUserId, async(req, res) => { // do your magic! + try { + const getUser = await Users.getById(req.params.id); + if (getUser) { + res.status(201).json(getUser) + } else { + res.status(500).json({ message: "no such user" }); + } + } catch (error) { + res.status(500).json({ error: error.message }); + } }); -router.get('/:id/posts', (req, res) => { +router.get('/:id/posts', validateUserId, async(req, res) => { // do your magic! + try { + const userPosts = await Users.getUserPosts(req.params.id); + if (userPosts) { + res.status(201).json(userPosts) + } else { + res.status(500).json({ message: "no posts yet" }); + } + } catch (error) { + res.status(500).json({ error: error.message }); + } }); -router.delete('/:id', (req, res) => { +router.delete('/:id', validateUserId, async(req, res) => { // do your magic! + try { + const deleteUser = await Users.remove(req.params.id); + if (deleteUser) { + res.status(201).end() + } else { + res.status(500).json({ message: "could not delete user" }); + } + } catch (error) { + res.status(500).json({ error: error.message }); + } }); -router.put('/:id', (req, res) => { +router.put('/:id', validateUserId, validateUser, async(req, res) => { // do your magic! + try { + const editUser = await Users.update(req.params.id, req.body); + if (editUser) { + res.status(201).json(editUser) + } else { + res.status(500).json({ message: "could not edit user" }); + } + } catch (error) { + res.status(500).json({ error: error.message }); + } }); //custom middleware -function validateUserId(req, res, next) { +async function validateUserId(req, res, next) { // do your magic! + try { + const getUserById = await Users.getById(req.params.id); + if (getUserById){ + next() + } else { + res.status(400).json({message: "no user with this id"}) + } + } catch (error) { + res.status(500).json({ error: error.message }); + } } function validateUser(req, res, next) { // do your magic! + if (req.body.name) { + next() + } else { + res.status(400).json({ message: "provide user name" }); + } } function validatePost(req, res, next) { // do your magic! + if (req.body.text) { + next() + } else { + res.status(400).json({ message: "provide post text" }); + } } module.exports = router;