northwind-rest-api
Version:
Local REST API Exposing Northwind Database.
130 lines (109 loc) • 3.52 kB
JavaScript
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;