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
25 changes: 0 additions & 25 deletions db/index.js

This file was deleted.

110 changes: 110 additions & 0 deletions src/controllers/books/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
const dbConnection = require('../../utils/dbConnection.js')

const getAllBooks = async(req, page, perPage) => {
const db = await dbConnection.connect()

const author = req.body.author
let offset

if(page > 1) {
offset = perPage-1
}

try {
if(author === undefined) {
const sqlQuery = `select * from books limit $1 offset $2`
const result = await db.query(sqlQuery, [perPage, offset])
return result.rows
}
const sqlQuery = `select * from books where author = $1 limit $2 offset $3 order by author`
const result = await db.query(sqlQuery, [author, perPage, offset])

return result.rows
} catch (e) {
console.log(e)
} finally {
db.release()
}
}

const createBook = async(req) => {
const db = await dbConnection.connect()

const title = req.body.title
const type = req.body.type
const author = req.body.author
const topic = req.body.topic
const pub_date = req.body.publication_date
const pages = Number(req.body.pages)
try {
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, pub_date, pages])

return result.rows[0]
} catch (e) {
console.log(e)
} finally {
db.release()
}
}

const getBookByID = async(req) => {
const id = req.params.id
const db = await dbConnection.connect()
try {
const sqlQuery = 'select * from books where id =' + id
const result = await db.query(sqlQuery)

return result.rows[0]
} catch (e) {
console.log(e)
} finally {
db.release()
}
}

const updateBook = async(req) => {
const db = await dbConnection.connect()
const id = req.params.id
const title = req.body.title
const type = req.body.type
const author = req.body.author
const topic = req.body.topic
const pub_date = req.body.publication_date
const pages = Number(req.body.pages)
try {
const sqlQuery = `update books set title = $1, type = $2, author = $3, topic = $4, publication_date = $5, pages = $6 where id=${id} returning *`
const result = await db.query(sqlQuery, [title, type, author, topic, pub_date, pages])

return result.rows[0]
} catch (e) {
console.log(e)
} finally {
db.release()
}
}

const deleteBook = async(req) => {
const id = Number(req.params.id)
const db = await dbConnection.connect()
try {
const sqlQuery = 'delete from books where id=$1 returning *'
const result = await db.query(sqlQuery, [id])

return result.rows[0]
} catch (e) {
console.log(e)
} finally {
db.release()
}
}


module.exports = {
getAllBooks,
createBook,
getBookByID,
updateBook,
deleteBook
}
94 changes: 94 additions & 0 deletions src/controllers/pets/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
const dbConnection = require('../../utils/dbConnection.js')

const getAllPets = async () => {
const db = await dbConnection.connect()
try {
const sqlQuery = 'select * from pets'
const result = await db.query(sqlQuery)

return result.rows
} catch (e) {
console.log(e)
} finally {
db.release()
}
}

const addPet = async (req) => {
const db = await dbConnection.connect()

const name = req.body.name
const age = Number(req.body.age)
const type = req.body.type
const breed = req.body.breed
const mchip = Boolean(req.body.has_microchip)
try {
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, mchip])

return result.rows[0]
} catch (e) {
console.log(e)
} finally {
db.release()
}
}

const getPetByID = async(req) => {
const id = Number(req.params.id)
const db = await dbConnection.connect()
try {
const sqlQuery = 'select * from pets where id ='+id
const result = await db.query(sqlQuery)
return result.rows[0]
} catch (e) {
console.log(e)
} finally {
db.release()
}
}

const updatePet = async(req) => {
const db = await dbConnection.connect()

const id = Number(req.params.id)
const name = req.body.name
const age = Number(req.body.age)
const type = req.body.type
const breed = req.body.breed
const mchip = Boolean(req.body.has_microchip)
try {
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, mchip, id])

return result.rows[0]
} catch (e) {
console.log(e)
} finally {
db.release()
}
}

const deletePet = async (req) => {
const id = Number(req.params.id)
const db = await dbConnection.connect()

try {
const sqlQuery = 'delete from pets where id=$1 returning *'
const result = await db.query(sqlQuery, [id])

return result.rows[0]
} catch (e) {
console.log(e)
} finally {
db.release()
}
}

module.exports = {
getAllPets,
addPet,
getPetByID,
updatePet,
deletePet
}
67 changes: 66 additions & 1 deletion src/routers/books.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,74 @@
const express = require('express')
const { getAllBooks, createBook, getBookByID, updateBook, deleteBook } = require('../controllers/books/index.js')
const router = express.Router()
const db = require("../../db");


router.get('/', async (req, res) => {
let page = req.body.page
let perPage = req.body.perPage

if (
page === undefined ||
page === 0
)
{
page = 1
}
if (
perPage === undefined ||
perPage === 0)
{
perPage = 20
}
if (
perPage > 50
) {
perPage = 50
} else if (
perPage < 10
) {
perPage = 10
}

const books = await getAllBooks(req, page, perPage)


res.status(200).json({
books,
perPage: perPage,
page: page
})
})

router.post('/', async (req, res) => {

const newBook = await createBook(req)
res.status(201).json({
book: newBook
})
})

router.get('/:id', async (req, res) => {
const book = await getBookByID(req)

res.status(200).json({
book: book
})
})

router.put('/:id', async(req, res) => {
const updatedBook = await updateBook(req)

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

router.delete('/:id', async(req, res) => {
const deletedBook = await deleteBook(req)

res.status(201).json({
book: deletedBook
})
})
module.exports = router
44 changes: 44 additions & 0 deletions src/routers/pets.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
const express = require('express')
const { getAllPets, addPet, getPetByID, updatePet, deletePet } = require('../controllers/pets')
const router = express.Router()

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

res.status(200).json({
pets
})
})

router.post('/', async(req, res) => {
const newPet = await addPet(req)

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

router.get('/:id', async(req, res) => {
const pet = await getPetByID(req)

res.status(200).json({
pet: pet
})
})

router.put('/:id', async (req, res) => {
const updatedPet = await updatePet(req)

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

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

module.exports = router
3 changes: 3 additions & 0 deletions src/server.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const express = require("express");
const morgan = require("morgan");
const cors = require("cors");
require('dotenv').config()

const app = express();

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('/pets', petsRouter)

module.exports = app
16 changes: 16 additions & 0 deletions src/utils/dbConnection.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const { Pool } = require('pg');

const { PGHOST, PGDATABASE, PGUSER, PGPASSWORD } = process.env;

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

module.exports = dbConnection
Loading