Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions db/dbConnection.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Load our .env file
require('dotenv').config()

const { Pool } = require("pg");
const { PGHOST, PGDATABASE, PGUSER, PGPASSWORD } = process.env;

const dbClient = new Pool({
host: PGHOST,
database: PGDATABASE,
username: PGUSER,
password: PGPASSWORD,
port: 5432,
ssl: {
require: true,
},
})

module.exports = dbClient;
25 changes: 0 additions & 25 deletions db/index.js

This file was deleted.

50 changes: 50 additions & 0 deletions src/dal/booksRepo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
const dbConnection = require('../../db/dbConnection.js')

const getAllBooks = async () => {
const sqlQuery = 'select * from books'
const result = await dbConnection.query(sqlQuery)
return result.rows
}

const createBook = async (book) => {
const {title, type, author, topic, publication_date, pages } = book

const sqlQuery = `INSERT INTO books (title, type, author, topic, publication_date, pages) values ($1, $2, $3, $4, $5, $6) returning *`

const values = [title, type, author, topic, publication_date, pages]

const result = await dbConnection.query(sqlQuery, values)
return result.rows[0]
}

const getBookById = async (id) => {
const sqlQuery = `select * from books where id = $1`
const result = await dbConnection.query(sqlQuery, [id])
return result.rows[0]
}

const updateBook = async (id, book) => {
const {title, type, author, topic, publication_date, pages } = book

const sqlQuery = `UPDATE books
SET title = $1, type = $2, author = $3, topic = $4, publication_date = $5, pages = $6
WHERE id = $7
RETURNING *`


const values = [title, type, author, topic, publication_date, pages, id]
const result = await dbConnection.query(sqlQuery, values)
return result.rows[0]
}

const deleteBook = async (id) => {
const getBook = `select * from books where id = $1`
const deletedBook = await dbConnection.query(getBook, [id])

const sqlQuery = 'delete from books where id = $1'
const result = await dbConnection.query(sqlQuery, [id])

return deletedBook.rows[0]
}

module.exports = { getAllBooks, createBook, getBookById, updateBook, deleteBook }
49 changes: 49 additions & 0 deletions src/dal/petsRepo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
const dbConnection = require('../../db/dbConnection.js')

const getAllPets = async () => {
const sqlQuery = 'select * from pets'
const result = await dbConnection.query(sqlQuery)
return result.rows
}

const createPet = async (pet) => {
const {name, age, type, breed, has_microchip } = pet

const sqlQuery = `INSERT INTO pets (name, age, type, breed, has_microchip) values ($1, $2, $3, $4, $5) returning *`

const values = [name, age, type, breed, has_microchip]

const result = await dbConnection.query(sqlQuery, values)
return result.rows[0]
}

const getPetById = async (id) => {
const sqlQuery = `select * from pets where id = $1`
const result = await dbConnection.query(sqlQuery, [id])
return result.rows[0]
}

const updatePet = async (id, pet) => {
const {name, age, type, breed, has_microchip } = pet

const sqlQuery = `UPDATE pets
SET name = $1, age = $2, type = $3, breed = $4, has_microchip = $5 WHERE id = $6
RETURNING *`


const values = [name, age, type, breed, has_microchip, id]
const result = await dbConnection.query(sqlQuery, values)
return result.rows[0]
}

const deletePet = async (id) => {
const getPet = `select * from pets where id = $1`
const deletedPet = await dbConnection.query(getPet, [id])

const sqlQuery = 'delete from pets where id = $1'
const result = await dbConnection.query(sqlQuery, [id])

return deletedPet.rows[0]
}

module.exports = { getAllPets, createPet,getPetById, updatePet, deletePet }
3 changes: 3 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ const port = 3030;
app.listen(port, () => {
console.log(`[SERVER] Running on http://localhost:${port}/`);
});


// setup a pool conection
39 changes: 38 additions & 1 deletion src/routers/books.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,46 @@
const express = require('express')
const router = express.Router()
const db = require("../../db");
const { getAllBooks, createBook, getBookById, updateBook, deleteBook } = require('../dal/booksRepo.js')

router.get('/', async (req, res) => {
const books = await getAllBooks()
res.status(200).json({
books
})
})

router.post('/', async (req, res) => {
const book = await createBook(req.body)
res.status(201).json({
book
})
})

router.get('/:id', async (req, res) => {
const id = Number(req.params.id)
const book = await getBookById(id)
res.status(200).json({
book
})
})

router.put('/:id', async (req, res) => {
const id = Number(req.params.id)
const newBookInfo = req.body

const updatedBook = await updateBook(id, newBookInfo)

res.status(201).json({
book : updatedBook
})
})

router.delete('/:id', async (req, res) => {
const id = Number(req.params.id)
const deletedBook = await deleteBook(id)
res.status(201).json({
book : deletedBook
})
})

module.exports = router
47 changes: 47 additions & 0 deletions src/routers/pets.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
const express = require('express')
const router = express.Router()
const { getAllPets, createPet
, getPetById, updatePet, deletePet} = require('../dal/petsRepo.js')

router.get('/', async (req, res) => {
const pets = await getAllPets()
res.status(200).json({
pets
})
})

router.post('/', async (req, res) => {
const pet = await createPet(req.body)
res.status(201).json({
pet
})
})

router.get('/:id', async (req, res) => {
const id = Number(req.params.id)
const pet = await getPetById(id)
res.status(200).json({
pet
})
})

router.put('/:id', async (req, res) => {
const id = Number(req.params.id)
const newPetInfo = req.body

const updatedPet = await updatePet(id, newPetInfo)

res.status(201).json({
pet : updatedPet
})
})

router.delete('/:id', async (req, res) => {
const id = Number(req.params.id)
const deletedPet = await deletePet(id)
res.status(201).json({
pet : deletedPet
})
})

module.exports = router
5 changes: 4 additions & 1 deletion src/server.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
require('dotenv').config()
const express = require("express");
const morgan = require("morgan");
const cors = require("cors");
Expand All @@ -10,7 +11,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('/books', booksRouter)
app.use('/pets', petsRouter)

module.exports = app
4 changes: 2 additions & 2 deletions test/database-cleaner/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const fs = require('fs/promises')
const client = require("../../db");
const client = require("../../db/dbConnection.js")

global.beforeEach(async() => {
const sqlDataForBooks = await fs.readFile('./sql/create-books.sql')
Expand All @@ -11,4 +11,4 @@ global.beforeEach(async() => {
const sqlStringForPets = sqlDataForPets.toString()

await client.query(sqlStringForPets)
})
})
2 changes: 1 addition & 1 deletion test/helpers/createBook.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const client = require("../../db");
const client = require("../../db/dbConnection.js");

const createBook = async (values) => {
const sqlString = `INSERT INTO "books" (title, type, author, topic, publication_date, pages) VALUES ($1, $2, $3, $4, $5, $6) RETURNING *;`
Expand Down
2 changes: 1 addition & 1 deletion test/helpers/createPet.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const client = require("../../db");
const client = require("../../db/dbConnection.js");

const createPet = async (values) => {
const sqlString = `INSERT INTO "pets" (name, age, type, breed, has_microchip) VALUES ($1, $2, $3, $4, $5) RETURNING *;`
Expand Down
2 changes: 1 addition & 1 deletion test/helpers/insertBooks.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const fs = require('fs/promises')
const client = require("../../db");
const client = require("../../db/dbConnection.js");

const insertBooks = async () => {
const sqlDataForBooks = await fs.readFile('./sql/insert-books.sql')
Expand Down
2 changes: 1 addition & 1 deletion test/helpers/insertPets.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const fs = require('fs/promises')
const client = require("../../db");
const client = require("../../db/dbConnection.js");

const insertPets = async () => {
const sqlDataForPets = await fs.readFile('./sql/insert-pets.sql')
Expand Down