ingredient route

This commit is contained in:
Mikayla Dobson
2022-11-19 13:31:23 -06:00
parent 21db95b624
commit 2583163fbb
6 changed files with 118 additions and 11 deletions

View File

@@ -1,21 +1,46 @@
import createError from "http-errors";
import { IIngredient } from "../schemas";
import { Ingredient } from "../models/ingredient";
const IngredientInstance = new Ingredient();
export default class IngredientCtl {
async getAll() {
try {
const result = await IngredientInstance.getAll();
if (!result) throw createError('404', 'No ingredients found');
return result;
} catch (e: any) {
throw new Error(e);
}
}
async getOne(id: string) {
try {
const result = await IngredientInstance.getOne(id);
if (!result) throw createError('404', 'No ingredient found with id ' + id);
return result;
} catch (e: any) {
throw new Error(e);
}
}
async post(data: IIngredient) {
try {
const result = await IngredientInstance.post(data);
if (!result) throw createError('400', 'Bad request');
return result;
} catch (e: any) {
throw new Error(e);
}
}
async put(id: string, data: IIngredient) {
try {
const result = await IngredientInstance.put(id, data);
if (!result) throw createError('400', 'Bad request');
return result;
} catch (e: any) {
throw new Error(e);
}
}
}

View File

@@ -0,0 +1,9 @@
import CollectionCtl from "./CollectionCtl";
import GroceryListCtl from "./GroceryListCtl";
import IngredientCtl from "./IngredientCtl";
import RecipeCtl from "./RecipeCtl";
import UserCtl from "./UserCtl";
export {
CollectionCtl, GroceryListCtl, IngredientCtl, RecipeCtl, UserCtl
}

View File

@@ -3,18 +3,58 @@ import pool from "../db";
export class Ingredient {
async getAll() {
try {
const statement = `SELECT * FROM recipin.ingredient`;
const result = await pool.query(statement);
if (result.rows.length) return result.rows;
return null;
} catch (e: any) {
throw new Error(e);
}
}
async getOne(id: string) {
try {
const statement = `SELECT * FROM recipin.ingredient WHERE id = $1`;
const result = await pool.query(statement, [id]);
if (result.rows.length) return result.rows[0];
return null;
} catch (e: any) {
throw new Error(e);
}
}
async post(data: IIngredient) {
try {
const statement = `
INSERT INTO recipin.ingredient
(name, description)
VALUES ($1, $2) RETURNING *`;
const values = [data.name, data.description];
const result = await pool.query(statement, values);
if (result.rows.length) return result.rows[0];
return null;
} catch (e: any) {
throw new Error(e);
}
}
async put(id: string, data: IIngredient) {
try {
const statement = `
UPDATE recipin.ingredient
SET name = $1,
description = $2
WHERE id = $3
RETURNING *
`
const values = [data.name, data.description, id];
const result = await pool.query(statement, values);
if (result.rows.length) return result.rows[0];
return null;
} catch (e: any) {
throw new Error(e);
}
}
}

View File

@@ -1,4 +1,5 @@
import { Express, Router } from "express";
import { GroceryListCtl } from "../controllers";
const router = Router();
@@ -18,6 +19,6 @@ export const groceryListRoute = (app: Express) => {
})
router.put('/:id', async (req, res, next) => {
})
}

View File

@@ -2,6 +2,7 @@ import { Express } from "express"
import { userRoute } from "./users";
import { recipeRoute } from "./recipe";
import { collectionRoute } from "./collection";
import { ingredientRoute } from "./ingredient";
export const routes = (app: Express, passport?: any) => {
console.log('routes called');
@@ -9,6 +10,7 @@ export const routes = (app: Express, passport?: any) => {
userRoute(app);
recipeRoute(app);
collectionRoute(app);
ingredientRoute(app);
app.get('/hello', (req, res) => {
res.send({ message: "hello from the server!!" });

View File

@@ -1,22 +1,52 @@
import { Express, Router } from "express";
import { IngredientCtl } from "../controllers";
const IngredientInstance = new IngredientCtl();
const router = Router();
export const ingredientRoute = (app: Express) => {
app.use('/ingredient', router);
router.get('/', async (req, res, next) => {
try {
const result = await IngredientInstance.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 IngredientInstance.getOne(id);
res.status(200).send(result);
} catch(e) {
next(e);
}
})
router.put('/:id', async (req, res, next) => {
const { id } = req.params;
const data = req.body;
try {
const result = await IngredientInstance.put(id, data);
res.status(200).send(result);
} catch(e) {
next(e);
}
})
router.post('/', async (req, res, next) => {
const data = req.body;
try {
const result = await IngredientInstance.post(data);
res.status(201).send(result);
} catch(e) {
next(e);
}
})
}