From 836b10379d04388be067974a471f61117f8e0f90 Mon Sep 17 00:00:00 2001 From: Mikayla Dobson <93477693+innocuous-symmetry@users.noreply.github.com> Date: Thu, 8 Dec 2022 14:11:16 -0600 Subject: [PATCH] added course route --- server/controllers/CourseCtl.ts | 36 +++++++++++++++++++++++++++ server/controllers/index.ts | 3 ++- server/models/course.ts | 44 +++++++++++++++++++++++++++++++++ server/routes/course.ts | 39 +++++++++++++++++++++++++++++ server/routes/index.ts | 2 ++ 5 files changed, 123 insertions(+), 1 deletion(-) diff --git a/server/controllers/CourseCtl.ts b/server/controllers/CourseCtl.ts index e69de29..3bcc99b 100644 --- a/server/controllers/CourseCtl.ts +++ b/server/controllers/CourseCtl.ts @@ -0,0 +1,36 @@ +import createError from 'http-errors'; +import { ICourse } from '../schemas'; +import Course from '../models/course'; +const CourseInstance = new Course(); + +export default class CourseCtl { + async getAll() { + try { + const result = await CourseInstance.getAll(); + if (!result) throw createError('404', 'No cuisines found'); + return result; + } catch (e: any) { + throw new Error(e); + } + } + + async getOne(id: string) { + try { + const result = await CourseInstance.getOne(id); + if (!result) throw createError('404', 'No cuisine found with id ' + id); + return result; + } catch (e: any) { + throw new Error(e); + } + } + + async post(data: ICourse) { + try { + const result = await CourseInstance.post(data); + if (!result) throw createError('400', 'Bad request'); + return result; + } catch (e: any) { + throw new Error(e); + } + } +} \ No newline at end of file diff --git a/server/controllers/index.ts b/server/controllers/index.ts index 19c23c0..b7e1767 100644 --- a/server/controllers/index.ts +++ b/server/controllers/index.ts @@ -4,7 +4,8 @@ import GroceryListCtl from "./GroceryListCtl"; import IngredientCtl from "./IngredientCtl"; import RecipeCtl from "./RecipeCtl"; import UserCtl from "./UserCtl"; +import CourseCtl from "./CourseCtl"; export { - CollectionCtl, CuisineCtl, GroceryListCtl, IngredientCtl, RecipeCtl, UserCtl + CollectionCtl, CuisineCtl, CourseCtl, GroceryListCtl, IngredientCtl, RecipeCtl, UserCtl } \ No newline at end of file diff --git a/server/models/course.ts b/server/models/course.ts index e69de29..e8b9580 100644 --- a/server/models/course.ts +++ b/server/models/course.ts @@ -0,0 +1,44 @@ +import now from "../util/now"; +import pool from "../db"; +import { ICourse } from "../schemas"; + +export default class Course { + async getOne(id: string) { + try { + const statement = `SELECT * FROM recipin.course WHERE id = $1`; + const values = [id]; + const result = await pool.query(statement, values); + if (result.rows) return result.rows[0]; + return null; + } catch (error: any) { + throw new Error(error); + } + } + + async getAll() { + try { + const statement = `SELECT * FROM recipin.course`; + const result = await pool.query(statement); + if (result.rows.length) return result.rows; + return null; + } catch (e: any) { + throw new Error(e); + } + } + + async post(data: ICourse) { + try { + const { name } = data; + const statement = ` + INSERT INTO recipin.course + (name, datecreated, datemodified, active) + VALUES ($1, $2, $3, $4) RETURNING *`; + const values = [name, now, now, true]; + const result = await pool.query(statement, values); + if (result.rows.length) return result.rows[0]; + return null; + } catch (e: any) { + throw new Error(e); + } + } +} \ No newline at end of file diff --git a/server/routes/course.ts b/server/routes/course.ts index e69de29..c68b385 100644 --- a/server/routes/course.ts +++ b/server/routes/course.ts @@ -0,0 +1,39 @@ +import { Express, Router } from 'express'; +import { CourseCtl } from '../controllers'; +const CourseInstance = new CourseCtl(); +const router = Router(); + +export const courseRouter = (app: Express) => { + app.use('/course', router); + + router.get('/', async (req, res, next) => { + try { + const result = await CourseInstance.getAll(); + res.status(200).send(result); + } catch(e) { + next(e); + } + }) + + router.get('/:id', async (req, res, next) => { + const { id } = req.params; + + try { + const result = await CourseInstance.getOne(id); + res.status(200).send(result); + } catch(e) { + next(e); + } + }) + + router.post('/', async (req, res, next) => { + const data = req.body; + + try { + const result = await CourseInstance.post(data); + res.status(201).send(result); + } catch(e) { + next(e); + } + }) +} \ No newline at end of file diff --git a/server/routes/index.ts b/server/routes/index.ts index 301ac85..591dc0e 100644 --- a/server/routes/index.ts +++ b/server/routes/index.ts @@ -9,6 +9,7 @@ import { authRoute } from "./auth"; import { subscriptionRoute } from "./subscription"; import { friendRouter } from "./friend"; import { cuisineRouter } from "./cuisine"; +import { courseRouter } from "./course"; export const routes = async (app: Express, passport: PassportStatic) => { console.log('routes called'); @@ -17,6 +18,7 @@ export const routes = async (app: Express, passport: PassportStatic) => { userRoute(app); friendRouter(app); cuisineRouter(app); + courseRouter(app); recipeRoute(app); collectionRoute(app); subscriptionRoute(app);