UNPKG

northwind-rest-api

Version:

Local REST API Exposing Northwind Database.

130 lines (109 loc) 3.52 kB
const express = require("express"); const Product = require("../models/product"); const productsLogic = require("../business-logic/products-logic"); const verifyToken = require("../middleware/verify-token"); const verifyAdmin = require("../middleware/verify-admin"); const router = express.Router(); // Get all products: router.get("/products", async (request, response) => { try { // Logic: const products = await productsLogic.getAllProducts(); // Success: response.json(products); } catch (err) { response.status(500).send(err.message); } }); // Get one product: router.get("/products/:id([0-9]+)", async (request, response) => { try { // Data: const id = +request.params.id; // Logic: const product = await productsLogic.getOneProduct(id); if(!product) return response.status(404).send(`id ${id} not found.`); // Success: response.json(product); } catch (err) { response.status(500).send(err.message); } }); // Add product: router.post("/products", async (request, response) => { try { // Data: const product = new Product(request.body); // Validation: const errors = product.validate(); if (errors) return response.status(400).send(errors); // Logic: const addedProduct = await productsLogic.addProduct(product, request.files?.image); // Success: response.status(201).json(addedProduct); } catch (err) { response.status(500).send(err.message); } }); // Update product: router.put("/products/:id([0-9]+)", async (request, response) => { try { // Data: const id = +request.params.id; request.body.id = id; const product = new Product(request.body); // Validation: const errors = product.validate(); if (errors) return response.status(400).send(errors); // Logic: const updatedProduct = await productsLogic.updateProduct(product, request.files?.image); if(!updatedProduct) return response.status(404).send(`id ${id} not found.`); // Success: response.json(updatedProduct); } catch (err) { response.status(500).send(err.message); } }); // Delete product: router.delete("/products/:id([0-9]+)", async (request, response) => { try { // Data: const id = +request.params.id; // Logic: await productsLogic.deleteProduct(id); // Success: response.sendStatus(204); } catch (err) { response.status(500).send(err.message); } }); // Get top products: router.get("/products/top-three", verifyToken, async (request, response) => { try { // Logic: const topProducts = await productsLogic.getTopProducts(); // Success: response.json(topProducts); } catch (err) { response.status(500).send(err.message); } }); // Get out-of-stock products: router.get("/products/out-of-stock", verifyAdmin, async (request, response) => { try { // Logic: const outOfStock = await productsLogic.getOutOfStockProducts(); // Success: response.json(outOfStock); } catch (err) { response.status(500).send(err.message); } }); module.exports = router;