- The code update adds a new `TODO` comment in the `model.controller.ts` file. - The new `TODO` is about getting a model with available vehicles. Issue: #28 Signed-off-by: Mathis <yidhra@tuta.io>
116 lines
3.9 KiB
TypeScript
116 lines
3.9 KiB
TypeScript
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
|
|
|
|
//TODO get model with vehicle available.
|
|
|
|
const ModelController = {
|
|
create: createModel,
|
|
update: updateModel,
|
|
getAll: getAllModel,
|
|
getBySlug: getModelBySlug,
|
|
delete: deleteModel,
|
|
}
|
|
|
|
export default ModelController; |