From 62cb05cb33d78797b1968e3eef2949c53c0e0160 Mon Sep 17 00:00:00 2001 From: Mathis Date: Thu, 25 Apr 2024 15:02:46 +0200 Subject: [PATCH] feat(controllers): add delete and getBySlug methods in category controller The `category.controller.ts` has been updated to handle deleting a category and retrieving a category by slug. The `deleteCategory` function takes a category slug from the request params and first checks if the category exists before attempting to delete it. While the `getBySlugCategory` function simply retrieves a category by its slug. Issue: #12 Signed-off-by: Mathis --- src/controllers/category.controller.ts | 48 ++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/controllers/category.controller.ts b/src/controllers/category.controller.ts index a9e57af..967f70f 100644 --- a/src/controllers/category.controller.ts +++ b/src/controllers/category.controller.ts @@ -67,6 +67,33 @@ async function updateCategory(req: Request, res:Response): Promise { return res.status(200).json({ message: "Category updated successfully" }); } +/** + * Deletes a category by its slug. + * + * @param {Request} req - The request object containing the category slug. + * @param {Response} res - The response object to send the result. + * @returns {Promise} A Promise that resolves to the response object. + */ +async function deleteCategory(req: Request, res: Response): Promise { + const categorySlug = req.params["categorySlug"]; + if (!categorySlug) { + logger.error("Category slug is missing"); + return res.status(400).json({ error: "Category slug is missing" }); + } + const doesExist = await CategoryService.getBySlug(`${categorySlug}`); + if (!doesExist || !doesExist.id) { + logger.error("Category not found"); + return res.status(404).json({ error: "Category not found" }); + } + const deleteResult = await CategoryService.delete(`${doesExist.id}`); + if (!deleteResult) { + logger.error("Failed to delete category"); + return res.status(500).json({ error: "Failed to delete category" }); + } + logger.info(`Category deleted successfully! (${categorySlug})`); + return res.status(200).json({ message: "Category deleted successfully" }); +} + /** * Retrieves all categories. * @@ -91,10 +118,31 @@ async function getAllCategory(res: Response): Promise { }); } +async function getBySlugCategory(req: Request, res:Response) { + const categorySlug = req.params["categorySlug"]; + if (!categorySlug) { + logger.error("Category slug is missing"); + return res.status(400).json({ error: "Category slug is missing" }); + } + const category = await CategoryService.getBySlug(`${categorySlug}`); + if (!category || !category.id) { + logger.error("Category not found"); + return res.status(404).json({ error: "Category not found" }); + } + logger.info(`Category retrieved successfully! (${categorySlug})`); + return res.status(200).json({ + id: category.id, + display_name: category.display_name, + slug_name: category.slug_name + }); +} + const CategoryController = { create: createCategory, update: updateCategory, + delete: deleteCategory, getAll: getAllCategory, + getBySlug: getBySlugCategory } export default CategoryController; \ No newline at end of file