From 81786e3f06bb4e31ac205af656ea907844051a69 Mon Sep 17 00:00:00 2001 From: Pierluigi Date: Tue, 30 Jan 2024 16:35:23 +0000 Subject: [PATCH 1/2] add books test suite pass --- src/controllers/books.js | 51 ++++++++++++++++++++++++++++++++++++++++ src/controllers/pets.js | 0 src/routers/books.js | 28 ++++++++++++++++++++-- src/routers/pets.js | 0 4 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 src/controllers/books.js create mode 100644 src/controllers/pets.js create mode 100644 src/routers/pets.js diff --git a/src/controllers/books.js b/src/controllers/books.js new file mode 100644 index 00000000..9a781e52 --- /dev/null +++ b/src/controllers/books.js @@ -0,0 +1,51 @@ +const db = require("../../db"); + +const getAllBooks = async (query_params) => { + let select_query = `SELECT * FROM books`; + let books; + + if (query_params.id) { + select_query += ` WHERE id = $1`; + books = await db.query(select_query, [query_params.id]); + } else { + books = await db.query(select_query); + } + + return books.rows; +}; + +const createBook = async (newBook) => { + const { title, type, author, topic, publication_date, pages } = newBook; + const result = await db.query( + "INSERT INTO books (title, type, author, topic, publication_date, pages) VALUES ($1, $2, $3, $4, $5, $6) RETURNING *", + [title, type, author, topic, publication_date, pages] + ); + return result.rows[0]; +}; + +const getBookById = async (id) => { + const result = await db.query( + "SELECT * FROM books WHERE id = $1", + [id] + ); + return result.rows[0]; +}; + +const updateBook = async (id, newBook) => { + const { title, type, author, topic, publication_date, pages } = newBook; + const result = await db.query( + "UPDATE books SET title = $2, type = $3, author = $4, topic = $5, publication_date = $6, pages = $7 WHERE id = $1 RETURNING *", + [id, title, type, author, topic, publication_date, pages] + ); + return result.rows[0]; +}; + +const deleteBook = async (id) => { + const result = await db.query( + "DELETE FROM books WHERE id = $1 RETURNING *", + [id] + ); + return result.rows[0]; +}; + +module.exports = { getAllBooks, createBook ,getBookById, updateBook,deleteBook }; diff --git a/src/controllers/pets.js b/src/controllers/pets.js new file mode 100644 index 00000000..e69de29b diff --git a/src/routers/books.js b/src/routers/books.js index 1551dd87..530dbacf 100644 --- a/src/routers/books.js +++ b/src/routers/books.js @@ -1,9 +1,33 @@ const express = require('express') const router = express.Router() -const db = require("../../db"); +const {getAllBooks,createBook,getBookById,updateBook,deleteBook} = require("../controllers/books") -router.get('/', async (req, res) => { +router.get('/', async (req, res) => { + const books = await getAllBooks(req.query) + res.status(200).json({books}) }) +router.post("/", async (req, res) => { + const newBook = await createBook(req.body); + res.status(201).json({ book: newBook }); +}); + +router.get("/:id", async (req, res) => { + const book = await getBookById(req.params.id); + res.status(200).json({ book }); +}); + +router.put("/:id", async (req, res) => { + const updatedBook = await updateBook(req.params.id, req.body); + res.status(201).json({ book: updatedBook }); +}); + +router.delete("/:id", async (req, res) => { + const deletedBook = await deleteBook(req.params.id); + res.status(201).json({ book: deletedBook }); +}); + + + module.exports = router diff --git a/src/routers/pets.js b/src/routers/pets.js new file mode 100644 index 00000000..e69de29b From 40002f24501d63e1aca2556ca969ed326b15267d Mon Sep 17 00:00:00 2001 From: Pierluigi Date: Tue, 30 Jan 2024 16:51:42 +0000 Subject: [PATCH 2/2] add pets test suite pass --- src/controllers/books.js | 26 ++++++++++++++------------ src/controllers/pets.js | 38 ++++++++++++++++++++++++++++++++++++++ src/routers/books.js | 27 +++++++++++++++------------ src/routers/pets.js | 37 +++++++++++++++++++++++++++++++++++++ src/server.js | 2 ++ 5 files changed, 106 insertions(+), 24 deletions(-) diff --git a/src/controllers/books.js b/src/controllers/books.js index 9a781e52..16abbe11 100644 --- a/src/controllers/books.js +++ b/src/controllers/books.js @@ -24,13 +24,10 @@ const createBook = async (newBook) => { }; const getBookById = async (id) => { - const result = await db.query( - "SELECT * FROM books WHERE id = $1", - [id] - ); - return result.rows[0]; + const result = await db.query("SELECT * FROM books WHERE id = $1", [id]); + return result.rows[0]; }; - + const updateBook = async (id, newBook) => { const { title, type, author, topic, publication_date, pages } = newBook; const result = await db.query( @@ -41,11 +38,16 @@ const updateBook = async (id, newBook) => { }; const deleteBook = async (id) => { - const result = await db.query( - "DELETE FROM books WHERE id = $1 RETURNING *", - [id] - ); - return result.rows[0]; + const result = await db.query("DELETE FROM books WHERE id = $1 RETURNING *", [ + id, + ]); + return result.rows[0]; }; -module.exports = { getAllBooks, createBook ,getBookById, updateBook,deleteBook }; +module.exports = { + getAllBooks, + createBook, + getBookById, + updateBook, + deleteBook, +}; diff --git a/src/controllers/pets.js b/src/controllers/pets.js index e69de29b..d28a373d 100644 --- a/src/controllers/pets.js +++ b/src/controllers/pets.js @@ -0,0 +1,38 @@ +const db = require("../../db"); + +const getAllPets = async () => { + const result = await db.query("SELECT * FROM pets"); + return result.rows; +}; + +const createPet = async (body) => { + const { name, age, type, breed, has_microchip } = body; + const result = await db.query( + "INSERT INTO pets (name, age, type, breed, has_microchip) VALUES ($1, $2, $3, $4, $5) RETURNING *", + [name, age, type, breed, has_microchip] + ); + return result.rows[0]; +}; + +const getPetById = async (id) => { + const result = await db.query("SELECT * FROM pets WHERE id = $1", [id]); + return result.rows[0]; +}; + +const updatePet = async (id, body) => { + const { name, age, type, breed, has_microchip } = body; + const result = await db.query( + "UPDATE pets SET name = $1, age = $2, type = $3, breed = $4, has_microchip = $5 WHERE id = $6 RETURNING *", + [name, age, type, breed, has_microchip, id] + ); + return result.rows[0]; +}; + +const deletePet = async (id) => { + const result = await db.query("DELETE FROM pets WHERE id = $1 RETURNING *", [id]); + return result.rows[0]; +}; + + + +module.exports = { getAllPets,createPet,getPetById ,updatePet,deletePet}; \ No newline at end of file diff --git a/src/routers/books.js b/src/routers/books.js index 530dbacf..4234d009 100644 --- a/src/routers/books.js +++ b/src/routers/books.js @@ -1,12 +1,17 @@ -const express = require('express') -const router = express.Router() -const {getAllBooks,createBook,getBookById,updateBook,deleteBook} = require("../controllers/books") - - -router.get('/', async (req, res) => { - const books = await getAllBooks(req.query) - res.status(200).json({books}) -}) +const express = require("express"); +const router = express.Router(); +const { + getAllBooks, + createBook, + getBookById, + updateBook, + deleteBook, +} = require("../controllers/books"); + +router.get("/", async (req, res) => { + const books = await getAllBooks(req.query); + res.status(200).json({ books }); +}); router.post("/", async (req, res) => { const newBook = await createBook(req.body); @@ -28,6 +33,4 @@ router.delete("/:id", async (req, res) => { res.status(201).json({ book: deletedBook }); }); - - -module.exports = router +module.exports = router; diff --git a/src/routers/pets.js b/src/routers/pets.js index e69de29b..1c785da7 100644 --- a/src/routers/pets.js +++ b/src/routers/pets.js @@ -0,0 +1,37 @@ +const express = require("express"); +const router = express.Router(); +const { + getAllPets, + createPet, + getPetById, + updatePet, + deletePet, +} = require("../controllers/pets.js"); + +router.get("/", async (req, res) => { + const pets = await getAllPets(req.query); + res.status(200).json({ pets }); +}); + +router.post("/", async (req, res) => { + const newPet = await createPet(req.body); + res.status(201).json({ pet : newPet }); +}); + +router.get("/:id", async (req, res) => { + const pet = await getPetById(req.params.id); + res.status(200).json({ pet }); +}); + +router.put("/:id", async (req, res) => { + const updatedPet = await updatePet(req.params.id, req.body); + res.status(201).json({ pet : updatedPet }); +}); + +router.delete("/:id", async (req, res) => { + const deletedPet = await deletePet(req.params.id); + res.status(201).json({ pet : deletedPet }); +}); + + +module.exports = router; \ No newline at end of file diff --git a/src/server.js b/src/server.js index dac55e5d..233ceb88 100644 --- a/src/server.js +++ b/src/server.js @@ -10,7 +10,9 @@ app.use(express.json()); //TODO: Implement books and pets APIs using Express Modular Routers const booksRouter = require('./routers/books.js') +const petsRouter = require('./routers/pets.js') app.use('/books', booksRouter) +app.use('/pets', petsRouter) module.exports = app