northwind-rest-api
Version:
Local REST API Exposing 'Northwind Traders' Database.
102 lines (85 loc) • 2.93 kB
JavaScript
const express = require("express");
const Category = require("../models/category");
const categoriesLogic = require("../business-logic/categories-logic");
const verifyToken = require("../middleware/verify-token");
const verifyAdmin = require("../middleware/verify-admin");
const router = express.Router();
// Get all categories:
router.get("/categories", verifyToken, async (request, response) => {
try {
// Logic:
const categories = await categoriesLogic.getAllCategories();
// Success:
response.json(categories);
}
catch (err) {
response.status(500).send(err.message);
}
});
// Get one category:
router.get("/categories/:id([0-9]+)", verifyToken, async (request, response) => {
try {
// Data:
const id = +request.params.id;
// Logic:
const category = await categoriesLogic.getOneCategory(id);
if(!category) return response.status(404).send(`id ${id} not found.`);
// Success:
response.json(category);
}
catch (err) {
response.status(500).send(err.message);
}
});
// Add category:
router.post("/categories", verifyToken, async (request, response) => {
try {
// Data:
const category = new Category(request.body);
// Validation:
const errors = category.validate();
if (errors) return response.status(400).send(errors);
// Logic:
const addedCategory = await categoriesLogic.addCategory(category, request.files?.image);
// Success:
response.status(201).json(addedCategory);
}
catch (err) {
response.status(500).send(err.message);
}
});
// Update category:
router.put("/categories/:id([0-9]+)", verifyToken, async (request, response) => {
try {
// Data:
const id = +request.params.id;
request.body.id = id;
const category = new Category(request.body);
// Validation:
const errors = category.validate();
if (errors) return response.status(400).send(errors);
// Logic:
const updatedCategory = await categoriesLogic.updateCategory(category, request.files?.image);
if(!updatedCategory) return response.status(404).send(`id ${id} not found.`);
// Success:
response.json(updatedCategory);
}
catch (err) {
response.status(500).send(err.message);
}
});
// Delete category:
router.delete("/categories/:id([0-9]+)", verifyAdmin, async (request, response) => {
try {
// Data:
const id = +request.params.id;
// Logic:
await categoriesLogic.deleteCategory(id);
// Success:
response.sendStatus(204);
}
catch (err) {
response.status(500).send(err.message);
}
});
module.exports = router;