From 9403d3abc9143d7670c2005ac883b2b4a31113e4 Mon Sep 17 00:00:00 2001 From: Oluwagbemi Abiodun Date: Sun, 30 Jun 2024 17:25:08 +0100 Subject: [PATCH 1/6] progress --- package-lock.json | 63 +++++++++----------------------------------- package.json | 4 +-- src/routers/books.js | 37 +++++++++++++++++++++++--- 3 files changed, 48 insertions(+), 56 deletions(-) diff --git a/package-lock.json b/package-lock.json index 37ccdff8..1ec30345 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "body-parser": "^1.20.2", "cors": "^2.8.5", "dotenv": "^16.3.1", - "express": "^4.18.2", + "express": "^4.19.2", "faker": "^5.5.3", "morgan": "1.10.0", "pg": "8.6.0", @@ -19,7 +19,7 @@ }, "devDependencies": { "jest": "^28.1.3", - "nodemon": "^3.0.2", + "nodemon": "^3.1.4", "supertest": "^6.3.3" } }, @@ -1740,9 +1740,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -2024,16 +2024,16 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -2064,43 +2064,6 @@ "node": ">= 0.10.0" } }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/faker": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz", @@ -3586,9 +3549,9 @@ "dev": true }, "node_modules/nodemon": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.2.tgz", - "integrity": "sha512-9qIN2LNTrEzpOPBaWHTm4Asy1LxXLSickZStAQ4IZe7zsoIpD/A7LWxhZV3t4Zu352uBcqVnRsDXSMR2Sc3lTA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz", + "integrity": "sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==", "dev": true, "dependencies": { "chokidar": "^3.5.2", diff --git a/package.json b/package.json index 57d8b4fb..ce8ca94a 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "body-parser": "^1.20.2", "cors": "^2.8.5", "dotenv": "^16.3.1", - "express": "^4.18.2", + "express": "^4.19.2", "faker": "^5.5.3", "morgan": "1.10.0", "pg": "8.6.0", @@ -20,7 +20,7 @@ }, "devDependencies": { "jest": "^28.1.3", - "nodemon": "^3.0.2", + "nodemon": "^3.1.4", "supertest": "^6.3.3" }, "keywords": [] diff --git a/src/routers/books.js b/src/routers/books.js index 1551dd87..fa329b80 100644 --- a/src/routers/books.js +++ b/src/routers/books.js @@ -1,9 +1,38 @@ +require('dotenv').config() const express = require('express') -const router = express.Router() -const db = require("../../db"); +const { Pool } = require('pg') + +//const db = require("../../db"); + +const { PGHOST, PGDATABASE, PGUSER, PGPASSWORD } = process.env; + +const pool = new Pool({ + host: PGHOST, + database: PGDATABASE, + username: PGUSER, + password: PGPASSWORD, + port: 5432, + ssl: { + require: true, + }, +}); + +const router = express.Router(); router.get('/', async (req, res) => { + const db = await pool.connect(); + console.log('start'); + const sqlQuery = 'SELECT * FROM books'; + const result = await db.query(sqlQuery); + + res.json({ + books: result.rows + + }); + + console.log(result.rows) + +}); -}) +module.exports = router; -module.exports = router From c7d930795573b2e414491ec7075c25014fb7f5af Mon Sep 17 00:00:00 2001 From: Oluwagbemi Abiodun Date: Sun, 30 Jun 2024 19:47:43 +0100 Subject: [PATCH 2/6] book pst done --- src/routers/books.js | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/routers/books.js b/src/routers/books.js index fa329b80..2403eb67 100644 --- a/src/routers/books.js +++ b/src/routers/books.js @@ -1,15 +1,13 @@ -require('dotenv').config() -const express = require('express') -const { Pool } = require('pg') - -//const db = require("../../db"); +require('dotenv').config(); +const express = require('express'); +const { Pool } = require('pg'); const { PGHOST, PGDATABASE, PGUSER, PGPASSWORD } = process.env; const pool = new Pool({ host: PGHOST, database: PGDATABASE, - username: PGUSER, + user: PGUSER, password: PGPASSWORD, port: 5432, ssl: { @@ -21,18 +19,22 @@ const router = express.Router(); router.get('/', async (req, res) => { const db = await pool.connect(); - console.log('start'); const sqlQuery = 'SELECT * FROM books'; const result = await db.query(sqlQuery); res.json({ books: result.rows - }); + db.release(); +}); - console.log(result.rows) - +router.post('/', async (req, res) => { + const { title, type, author, topic, publication_date, pages } = req.body; + const db = await pool.connect(); + const sqlQuery = 'INSERT INTO books (title, type, author, topic, publication_date, pages) VALUES ($1, $2, $3, $4, $5, $6) RETURNING *'; + const result = await db.query(sqlQuery, [title, type, author, topic, publication_date, pages]); + res.status(201).json({ book: result.rows[0] }); + db.release(); }); module.exports = router; - From 92d4fa837e8e9a370c4caabc593ce91e9619214f Mon Sep 17 00:00:00 2001 From: Oluwagbemi Abiodun Date: Sun, 30 Jun 2024 20:18:42 +0100 Subject: [PATCH 3/6] put done --- src/routers/books.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/routers/books.js b/src/routers/books.js index 2403eb67..446f86a7 100644 --- a/src/routers/books.js +++ b/src/routers/books.js @@ -37,4 +37,40 @@ router.post('/', async (req, res) => { db.release(); }); +router.get('/:id', async (req, res) => { + const { id } = req.params; + const db = await pool.connect(); + const sqlQuery = 'SELECT * FROM books WHERE id = $1'; + const result = await db.query(sqlQuery, [id]); + + if (result.rows.length > 0) { + res.json({ book: result.rows[0] }); + } else { + res.status(404).json({ error: 'Book not found' }); + } + + db.release(); +}) + +router.put('/:id', async (req, res) => { + const { id } = req.params; + const { title, type, author, topic, publication_date, pages } = req.body; + const db = await pool.connect(); + const sqlQuery = ` + UPDATE books + SET title = $1, type = $2, author = $3, topic = $4, publication_date = $5, pages = $6 + WHERE id = $7 + RETURNING * + `; + const result = await db.query(sqlQuery, [title, type, author, topic, publication_date, pages, id]); + + if (result.rows.length > 0) { + res.json({ book: result.rows[0] }); + } else { + res.status(404).json({ error: 'Book not found' }); + } + + db.release(); +}); + module.exports = router; From 365b66586bd2df4f9aae1606c284092955ba5753 Mon Sep 17 00:00:00 2001 From: Oluwagbemi Abiodun Date: Sun, 30 Jun 2024 20:56:48 +0100 Subject: [PATCH 4/6] books done --- src/routers/books.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/routers/books.js b/src/routers/books.js index 446f86a7..70f83081 100644 --- a/src/routers/books.js +++ b/src/routers/books.js @@ -73,4 +73,20 @@ router.put('/:id', async (req, res) => { db.release(); }); +router.delete('/:id', async (req, res) => { + const { id } = req.params; + const db = await pool.connect(); + const sqlQuery = 'DELETE FROM books WHERE id = $1 RETURNING *'; + const result = await db.query(sqlQuery, [id]); + + if (result.rows.length > 0) { + res.json({ message: 'Book deleted successfully' }); + } else { + res.status(404).json({ error: 'Book not found' }); + } + + db.release(); +}); + + module.exports = router; From f0c61ba11209fb2ab890cde31ab6148010e88df5 Mon Sep 17 00:00:00 2001 From: Oluwagbemi Abiodun Date: Sun, 30 Jun 2024 21:52:48 +0100 Subject: [PATCH 5/6] get all pets done --- src/routers/pets.js | 32 ++++++++++++++++++++++++++++++++ src/server.js | 2 ++ 2 files changed, 34 insertions(+) create mode 100644 src/routers/pets.js diff --git a/src/routers/pets.js b/src/routers/pets.js new file mode 100644 index 00000000..57a69b9c --- /dev/null +++ b/src/routers/pets.js @@ -0,0 +1,32 @@ +require('dotenv').config(); +const express = require('express'); +const { Pool } = require('pg'); + +const { PGHOST, PGDATABASE, PGUSER, PGPASSWORD } = process.env; + +const pool = new Pool({ + host: PGHOST, + database: PGDATABASE, + user: PGUSER, + password: PGPASSWORD, + port: 5432, + ssl: { + require: true, + }, +}); + +const router = express.Router(); + +router.get('/', async (req, res) => { + const db = await pool.connect(); + const sqlQuery = 'SELECT * FROM pets'; + const result = await db.query(sqlQuery); + + res.json({ + pets: result.rows + }); + db.release(); +}); + + +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 From 30a40db9304d3ff3d2efaa13e3d604ea9bf65c01 Mon Sep 17 00:00:00 2001 From: Oluwagbemi Abiodun Date: Sun, 30 Jun 2024 22:51:43 +0100 Subject: [PATCH 6/6] standard done --- src/routers/pets.js | 68 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/src/routers/pets.js b/src/routers/pets.js index 57a69b9c..dd67e31d 100644 --- a/src/routers/pets.js +++ b/src/routers/pets.js @@ -17,6 +17,7 @@ const pool = new Pool({ const router = express.Router(); +//Get all pets router.get('/', async (req, res) => { const db = await pool.connect(); const sqlQuery = 'SELECT * FROM pets'; @@ -28,5 +29,72 @@ router.get('/', async (req, res) => { db.release(); }); +//gets pet by ID +router.get('/:id', async (req, res) => { + const { id } = req.params + const db = await pool.connect() + const sqlQuery = 'SELECT * FROM pets WHERE id = $1' + const result = await db.query(sqlQuery, [id]) + + if (result.rows.length > 0) { + res.json({pet: result.rows[0] }) + } else { + res.status(404).json({ error: 'pet not found'}) + } + db.release() +}) + +//Add to pet +router.post('/', async (req, res) => { + const {name, age, type, breed, has_microchip} = req.body + const db = await pool.connect() + const sqlQuery = 'INSERT INTO pets (name, age, type, breed, has_microchip) VALUES ($1, $2, $3, $4, $5) RETURNING *' + const result = await db.query(sqlQuery, [name, age, type, breed, has_microchip]) + res.status(201).json({pet: result.rows[0]}) + + db.release() +}) + +// Wdit pets +router.put('/:id', async (req, res) => { + const { id } = req.params + const {name, age, type, breed, has_microchip} = req.body + const db = await pool.connect() + const sqlQuery = ` + UPDATE pets + SET name = $1, + age = $2, + type = $3, + breed = $4, + has_microchip = $5 + WHERE id = $6 + RETURNING * + ` + const result = await db.query(sqlQuery, [name, age, type, breed, has_microchip, id]) + + if (result.rows.length > 0) { + res.json({pet: result.rows[0]}) + } else { + res.status(400).json({ error: 'Pet not found' }) + } +}) + + +//Deletes pet + +router.delete('/:id', async (req, res) => { + const { id } = req.params; + const db = await pool.connect(); + const sqlQuery = 'DELETE FROM pets WHERE id = $1 RETURNING *'; + const result = await db.query(sqlQuery, [id]); + + if (result.rows.length > 0) { + res.json({ message: 'Pet deleted', pet: result.rows[0] }); + } else { + res.status(404).json({ error: 'Pet not found' }); + } + db.release(); +}); + module.exports = router; \ No newline at end of file