feat(controllers): add ModelController with CRUD methods

This commit adds a new controller, `ModelController`, to the controllers directory. This controller includes create, read, update and delete (CRUD) methods for handling 'model' related operations. Each method incorporates appropriate error handling and logging.

Issue: #28
Signed-off-by: Mathis <yidhra@tuta.io>
This commit is contained in:
Mathis H (Avnyr) 2024-04-26 14:09:29 +02:00
parent 9bdcdef88f
commit a74731a49e
Signed by: Mathis
GPG Key ID: DD9E0666A747D126

View File

@ -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<Response> {
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<Response> {
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<Response> {
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<Response> {
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<Response> {
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;