diff --git a/app.js b/app.js index 18fd6c7..99e0ee8 100644 --- a/app.js +++ b/app.js @@ -5,6 +5,8 @@ require('dotenv').config(); const app = express(); +const catalogRouter = require('./routes/catalog'); + const PORT = process.env.PORT || 3001; app.use( @@ -16,6 +18,8 @@ app.use( // add all routes under here app.use(express.json()); // for req.body +app.use('/catalog', catalogRouter); + app.listen(PORT, () => { console.log(`Server listening on ${PORT}`); }); diff --git a/routes/catalog.js b/routes/catalog.js new file mode 100644 index 0000000..0f98bb1 --- /dev/null +++ b/routes/catalog.js @@ -0,0 +1,92 @@ +const express = require('express'); + +const { db } = require('../server/db'); + +const catalogRouter = express.Router(); +const { keysToCamel } = require('../common/utils'); + +// -- GET - Returns all data from the catalog table +catalogRouter.get('/', async (req, res) => { + try { + const allInfo = await db.query(`SELECT * from catalog;`); + res.status(200).json(keysToCamel(allInfo)); + } catch (err) { + res.status(500).send(err.message); + } +}); + +// -- GET/:id - Returns the row that matches the id +catalogRouter.get('/:id', async (req, res) => { + try { + const { id } = req.params; + const allUsers = await db.query(`SELECT * FROM catalog WHERE id = $1;`, [id]); + res.status(200).json(keysToCamel(allUsers)); + } catch (err) { + res.status(500).send(err.message); + } +}); + +// -- POST - Adds a new row to the catalog table +catalogRouter.post('/', async (req, res) => { + const { id, host, title, eventType, subject, description, year } = req.body; + try { + await db.query( + `INSERT INTO catalog (id, host, title, event_type, subject, description, year) + VALUES ($1, $2, $3, $4, $5, $6, $7);`, + [id, host, title, eventType, subject, description, year], + ); + res.status(201).json({ id, status: 'Success' }); + } catch (err) { + res.status(500).json({ + status: 'Failed', + msg: err.message, + }); + } +}); + +// -- PUT - Updates an existing row given an id +// -- All fields are optional +catalogRouter.put('/:id', async (req, res) => { + try { + const { id } = req.params; + const { host, title, eventType, subject, description, year } = req.body; + + const updatedCatalog = await db.query( + `UPDATE catalog SET + ${host ? 'host = $(host), ' : ''} + ${title ? 'title = $(title),' : ''} + ${eventType ? 'event_type = $(eventType), ' : ''} + ${subject ? 'subject = $(subject), ' : ''} + ${description ? 'description = $(description), ' : ''} + ${year ? 'year = $(year), ' : ''} + id = '${id}' + WHERE id = '${id}' + RETURNING *;`, + { + host, + title, + eventType, + subject, + description, + year, + id, + }, + ); + res.status(200).send(keysToCamel(updatedCatalog)); + } catch (err) { + res.status(500).send(err.message); + } +}); + +// -- DELETE - deletes an existing row given an id +catalogRouter.delete('/:id', async (req, res) => { + try { + const { id } = req.params; + const delUser = await db.query(`DELETE FROM catalog WHERE id = $1 RETURNING *;`, [id]); + res.status(200).send(keysToCamel(delUser)); + } catch (err) { + res.status(500).send(err.message); + } +}); + +module.exports = catalogRouter; diff --git a/server/queries/catalog.sql b/server/queries/catalog.sql deleted file mode 100644 index d1a67d0..0000000 --- a/server/queries/catalog.sql +++ /dev/null @@ -1,22 +0,0 @@ --- GET - Returns all data from the catalog table -SELECT * FROM catalog; - - --- GET/:id - Returns the row that matches the id -SELECT * FROM catalog WHERE id = ?; - - --- POST - Adds a new row to the catalog table -INSERT INTO catalog (id, host, title, event_type, subject, description, year) -VALUES (?, ?, ?, ?, ?, ?, ?); - - --- PUT - Updates an existing row given an id --- All fields are optional -UPDATE catalog -SET host = ?, title = ?, event_type = ?, subject = ?, description = ?, year = ? -WHERE id = ?; - - --- DELETE - deletes an existing row given an id -DELETE FROM catalog WHERE id=?; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index bef156e..53bf992 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2497,4 +2497,4 @@ yallist@^4.0.0: yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== \ No newline at end of file