diff --git a/src/controllers/model.controller.ts b/src/controllers/model.controller.ts new file mode 100644 index 0000000..d5067b2 --- /dev/null +++ b/src/controllers/model.controller.ts @@ -0,0 +1,115 @@ +import type {Request, Response} from "express"; +import {Logger} from "tslog"; +import CategoryService from "@services/category.service"; +import type IDbModel from "@interfaces/database/IDbModel"; +import ModelService from "@services/model.service"; +//import {validationResult} from "express-validator"; + + +const logger = new Logger({ name: "ModelController" }); + + +async function createModel(req: Request, res: Response): Promise { + const body: IDbModel = req.body + const doesExist = await CategoryService.getBySlug(`${body.slug_name}`) + if (doesExist) { + logger.error("Category already exists"); + return res.status(400).json({ error: "Category already exists" }); + } + const createResult = await ModelService.create({ + display_name: `${body.display_name}`, + slug_name: `${body.slug_name}`, + category_id: `${body.category_id}`, + base_price: Number.parseFloat(`${body.base_price}`), + brand_id: `${body.brand_id}`, + image_blob: `${body.image_blob}`, + is_trending: !!body.is_trending + }) + if (!createResult) { + logger.error("Failed to create category"); + return res.status(500).json({ error: "Failed to create category" }); + } + logger.info(`Category created successfully ! (${body.slug_name})`) + return res.status(201).json({ message: "Category created successfully" }); +} + +async function updateModel(req: Request, res: Response): Promise { + const body: IDbModel = req.body; + const doesExist = await ModelService.getBySlug(`${body.slug_name}`); + if (!doesExist) { + logger.error("Model does not exist"); + return res.status(404).json({ error: "Model does not exist" }); + } + const updateResult = await ModelService.update({ + id: `${body.id}`, + display_name: `${body.display_name}`, + slug_name: `${body.slug_name}`, + category_id: `${body.category_id}`, + base_price: Number.parseFloat(`${body.base_price}`), + brand_id: `${body.brand_id}`, + image_blob: `${body.image_blob}`, + is_trending: !!body.is_trending + }); + if (!updateResult) { + logger.error("Failed to update model"); + return res.status(500).json({ error: "Failed to update model" }); + } + logger.info(`Model updated successfully! (${body.slug_name})`); + return res.status(200).json({ message: "Model updated successfully" }); +} + +async function getAllModel(res: Response): Promise { + const models = await ModelService.getAll(); + if (!models) { + logger.error("Failed to get all models"); + return res.status(500).json({ error: "Failed to get all models" }); + } + return res.status(200).json({ + uat: Date.now(), + models: models, + total: models.length + }); +} + +async function getModelBySlug(req: Request, res: Response): Promise { + const slug = req.params["modelSlug"]; + if (!slug) { + logger.error("Invalid slug"); + return res.status(400).json({ error: "Invalid slug" }); + } + const model = await ModelService.getBySlug(slug); + if (!model) { + logger.error("Model not found"); + return res.status(404).json({ error: "Model not found" }); + } + return res.status(200).json({ model }); +} + +async function deleteModel(req: Request, res: Response): Promise { + const modelSlug = req.params["modelSlug"]; + if (!modelSlug) { + logger.error("Invalid model slug"); + return res.status(400).json({ error: "Invalid model slug" }); + } + //TODO Check if vehicle related to model + const deleteResult = await ModelService.delete(modelSlug); + if (!deleteResult) { + logger.error("Failed to delete model"); + return res.status(500).json({ error: "Failed to delete model" }); + } + logger.info(`Model deleted successfully! (SLUG: ${modelSlug})`); + return res.status(200).json({ message: "Model deleted successfully" }); +} + +//TODO get all vehicles of an model by slug + + +const ModelController = { + create: createModel, + update: updateModel, + getAll: getAllModel, + getBySlug: getModelBySlug, + delete: deleteModel, +} + +export default ModelController; \ No newline at end of file