From d99cf5bb8adaf70395aa09e3a9fe6439e612fd58 Mon Sep 17 00:00:00 2001 From: Mikayla Dobson <93477693+innocuous-symmetry@users.noreply.github.com> Date: Tue, 27 Sep 2022 17:08:59 -0500 Subject: [PATCH] implements a category route --- models/CategoryModel.js | 50 +++++++++++++++++++++++++++++++++++++ routes/API.js | 2 ++ routes/category.js | 49 ++++++++++++++++++++++++++++++++++++ services/CategoryService.js | 29 +++++++++++++++++++++ 4 files changed, 130 insertions(+) create mode 100644 models/CategoryModel.js create mode 100644 routes/category.js create mode 100644 services/CategoryService.js diff --git a/models/CategoryModel.js b/models/CategoryModel.js new file mode 100644 index 0000000..b1e69e2 --- /dev/null +++ b/models/CategoryModel.js @@ -0,0 +1,50 @@ +const db = require('../db/Pool'); +const pgp = require('pg-promise')({ capSQL: true }); + +module.exports = class CategoryModel { + async getAll() { + try { + const statement = "SELECT * FROM category"; + const result = await db.query(statement); + if (result.rows.length) return result.rows; + return null; + } catch(e) { + throw new Error(e); + } + } + + async getById(id) { + try { + const statement = "SELECT * FROM category WHERE id = $1"; + const values = [id]; + const result = await db.query(statement, values); + if (result.rows.length) return result.rows; + return null; + } catch(e) { + throw new Error(e); + } + } + + async getByName(name) { + try { + const statement = "SELECT * FROM category WHERE name = $1"; + const values = [name]; + const result = await db.query(statement, values); + if (result.rows.length) return result.rows; + return null; + } catch(e) { + throw new Error(e); + } + } + + async insertOne(data) { + try { + const statement = pgp.helpers.insert(data, null, 'category') + "RETURNING *"; + const result = await db.query(statement); + if (result.rows.length) return result.rows; + return null; + } catch(e) { + throw new Error(e); + } + } +} \ No newline at end of file diff --git a/routes/API.js b/routes/API.js index 8a788cf..f4e1255 100644 --- a/routes/API.js +++ b/routes/API.js @@ -1,6 +1,7 @@ const authRouter = require('./auth'); const userRouter = require('./user'); const productRouter = require('./product'); +const categoryRouter = require('./category'); const regionsRouter = require('./regions'); const orderRouter = require('./orders'); const cartRouter = require('./cart'); @@ -9,6 +10,7 @@ module.exports = (app, passport) => { authRouter(app, passport); userRouter(app); productRouter(app); + categoryRouter(app); regionsRouter(app); orderRouter(app); cartRouter(app); diff --git a/routes/category.js b/routes/category.js new file mode 100644 index 0000000..ea9d98d --- /dev/null +++ b/routes/category.js @@ -0,0 +1,49 @@ +const router = require('express').Router(); +const CategoryService = require('../services/CategoryService'); +const CategoryInstance = new CategoryService(); + +module.exports = (app) => { + app.use('/api/category', router); + + router.get('/', async (req, res, next) => { + const { name } = req.query; + + if (name) { + try { + const response = await CategoryInstance.getByName(name); + res.status(200).send(response); + } catch(e) { + next(e); + } + } else { + try { + const response = await CategoryInstance.getAll(); + res.status(200).send(response); + } catch(e) { + next(e); + } + } + }) + + router.get('/:productid', async (req, res, next) => { + const { productid } = req.params; + + try { + const response = await CategoryInstance.getById(productid); + res.status(200).send(response); + } catch(e) { + next(e); + } + }) + + router.post('/', async (req, res, next) => { + const data = req.body; + + try { + const response = await CategoryInstance.create(data); + res.status(201).send(response); + } catch(e) { + next(e); + } + }) +} \ No newline at end of file diff --git a/services/CategoryService.js b/services/CategoryService.js new file mode 100644 index 0000000..fae5ca0 --- /dev/null +++ b/services/CategoryService.js @@ -0,0 +1,29 @@ +const createError = require('http-errors'); +const CategoryModel = require('../models/CategoryModel'); +const CategoryInstance = new CategoryModel(); + +module.exports = class CategoryService { + async getAll() { + const result = await CategoryInstance.getAll(); + if (!result) throw createError(404, "Resource not found."); + return result; + } + + async getById(id) { + const result = await CategoryInstance.getById(id); + if (!result) throw createError(404, "Resource not found."); + return result; + } + + async getByName(name) { + const result = await CategoryInstance.getByName(name); + if (!result) throw createError(404, "Resource not found."); + return result; + } + + async create(data) { + const result = await CategoryInstance.insertOne(data); + if (!result) throw createError(404, "Resource not found."); + return result; + } +} \ No newline at end of file