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:
parent
9bdcdef88f
commit
a74731a49e
115
src/controllers/model.controller.ts
Normal file
115
src/controllers/model.controller.ts
Normal 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;
|
Loading…
x
Reference in New Issue
Block a user