Skip to content

src/product-router.ts โ€‹

From Week 3 in-class: MongoDB + Vitest ยท original: si-679-f-26-week03-nyt-jessicadonoho/src/product-router.ts ยท all files in this project

ts
import express from 'express';
import type { Request, Response } from 'express';
import { addProduct, deleteProduct, getAllProducts, getProduct, updateProduct } from './db.js';
import type { Product, ProductUpdate } from './db.js';

export const productRouter = express.Router();

productRouter.get('/', async (req: Request, res: Response) => {
    const all = await getAllProducts();
    res.json(all);
  });


productRouter.get('/:id', async (req: Request, res: Response) => {
  const product = await getProduct(String(req.params.id));
  if (!product) { //if product is undefined, send 404
    res.sendStatus(404);
    return; //break
  }
  res.json(product);
});

productRouter.post('/', async (req: Request, res: Response) => {
  const product: Product = {
    name: req.body.name,
    price: req.body.price,
    quantity: req.body.quantity
  };
  const id = await addProduct(product);
  res.status(201).json({ id });
});

productRouter.patch('/:id', async (req: Request, res: Response) => {
  const changes: ProductUpdate = req.body;
  const matched = await updateProduct(String(req.params.id), changes);
  if (matched === 0) {
    res.sendStatus(404);
    return;
  }
  res.sendStatus(200);
});

productRouter.delete('/:id', async (req: Request, res: Response) => {
  const deleted = await deleteProduct(String(req.params.id));
  if (deleted === 0) {
    res.sendStatus(404);
    return;
  }
  res.sendStatus(200);
});