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 //TODO get model with vehicle available. const ModelController = { create: createModel, update: updateModel, getAll: getAllModel, getBySlug: getModelBySlug, delete: deleteModel, } export default ModelController;