Compare commits
3 Commits
da028ea2c4
...
f87aecaf75
| Author | SHA1 | Date | |
|---|---|---|---|
| f87aecaf75 | |||
| 170b9a5693 | |||
| c9ca39ddfa |
174
src/controllers/vehicle.controller.ts
Normal file
174
src/controllers/vehicle.controller.ts
Normal file
@ -0,0 +1,174 @@
|
||||
import type { IDbVehicle } from "@interfaces/database/IDbVehicle";
|
||||
import VehicleService from "@services/vehicle.service";
|
||||
import { isDebugMode } from "@utils/debugState";
|
||||
import type { Request, Response } from "express";
|
||||
import { Logger } from "tslog";
|
||||
//import {validationResult} from "express-validator";
|
||||
|
||||
const logger = new Logger({
|
||||
name: "VehicleController",
|
||||
});
|
||||
|
||||
/**
|
||||
* Creates a new vehicle in the database.
|
||||
*
|
||||
* @param {Request} req - The request object containing the vehicle details in the body.
|
||||
* @param {Response} res - The response object used to send the result of the operation.
|
||||
* @returns {Promise<Response>} The response with the result of the operation.
|
||||
*/
|
||||
async function createVehicle(req: Request, res: Response): Promise<Response> {
|
||||
const body: IDbVehicle = req.body;
|
||||
const createResult = await VehicleService.create({
|
||||
plate_number: `${body.plate_number}`,
|
||||
model_id: `${body.plate_number}`,
|
||||
odometer: Number.parseInt(`${body.odometer}`),
|
||||
health_state: Number.parseInt(`${body.health_state}`),
|
||||
});
|
||||
if (!createResult) {
|
||||
logger.error("Failed to create vehicle");
|
||||
return res.status(500).json({
|
||||
error: "Failed to create vehicle",
|
||||
});
|
||||
}
|
||||
logger.info(`Vehicle created successfully ! (${body.plate_number})`);
|
||||
return res.status(201).json({
|
||||
message: "Vehicle created successfully",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates a vehicle in the database.
|
||||
*
|
||||
* @param {Request} req - The request object containing the vehicle data in the request body and the vehicle ID in the request parameters.
|
||||
* @param {Response} res - The response object used to send the result of the update operation.
|
||||
*
|
||||
* @return {Promise<Response>} A promise that resolves to the response object with a status and a JSON body indicating the result of the update operation.
|
||||
*/
|
||||
async function updateVehicle(req: Request, res: Response): Promise<Response> {
|
||||
const body: IDbVehicle = req.body;
|
||||
const vehicleId = req.params["vehicleId"];
|
||||
if (!vehicleId || vehicleId.length !== 36) {
|
||||
if (isDebugMode()) logger.error("Vehicle ID is missing");
|
||||
return res.status(400).json({
|
||||
error: "Vehicle ID is missing or not valid",
|
||||
});
|
||||
}
|
||||
const updateResult = await VehicleService.update({
|
||||
plate_number: `${body.plate_number}`,
|
||||
model_id: `${body.plate_number}`,
|
||||
odometer: Number.parseInt(`${body.odometer}`),
|
||||
health_state: Number.parseInt(`${body.health_state}`),
|
||||
});
|
||||
if (!updateResult) {
|
||||
logger.error("Failed to update vehicle");
|
||||
return res.status(500).json({
|
||||
error: "Failed to update vehicle",
|
||||
});
|
||||
}
|
||||
logger.info(`Vehicle updated successfully ! (${body.plate_number})`);
|
||||
return res.status(200).json({
|
||||
message: "Vehicle updated successfully",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves all vehicles from the vehicle service.
|
||||
*
|
||||
* @param {Response} res - The response object from the client.
|
||||
* @returns {Promise<Response>} A promise that resolves to a response object containing the result of the operation. The result is a JSON object containing all vehicles.
|
||||
*/
|
||||
async function getAllVehicle(res: Response): Promise<Response> {
|
||||
const getAllVehicleResult = await VehicleService.getAll();
|
||||
if (!getAllVehicleResult) {
|
||||
logger.error("Failed to get all vehicles");
|
||||
return res.status(500).json({
|
||||
error: "Failed to get all vehicles",
|
||||
});
|
||||
}
|
||||
return res.status(200).json(getAllVehicleResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the available vehicles from the VehicleService
|
||||
*
|
||||
* @param {Response} res - The Response object to send the result to
|
||||
* @returns {Promise<Response<any, Record<string, any>>>} - A promise that resolves to a Response object containing the available vehicles or an error message
|
||||
*/
|
||||
async function getAvailableVehicle(res: Response): Promise<Response<any, Record<string, any>>> {
|
||||
const getAvailableVehicleResult = await VehicleService.getAvailable();
|
||||
if (!getAvailableVehicleResult) {
|
||||
logger.error("Failed to get available vehicles");
|
||||
return res.status(500).json({
|
||||
error: "Failed to get available vehicles",
|
||||
});
|
||||
}
|
||||
return res.status(200).json(getAvailableVehicleResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a vehicle by its ID.
|
||||
*
|
||||
* @param {Request} req - The request object containing the vehicle ID.
|
||||
* @param {Response} res - The response object used to send the result.
|
||||
*
|
||||
* @return {Promise<Response>} A promise that resolves to the result of the retrieval operation.
|
||||
*/
|
||||
async function getVehicleById(req: Request, res: Response): Promise<Response> {
|
||||
const vehicleId = req.params["vehicleId"];
|
||||
if (!vehicleId || vehicleId.length !== 36) {
|
||||
if (isDebugMode()) logger.error("Vehicle ID is missing or not valid");
|
||||
return res.status(400).json({
|
||||
error: "Vehicle ID is missing or not valid",
|
||||
});
|
||||
}
|
||||
const getVehicleResult = await VehicleService.getById(vehicleId);
|
||||
if (!getVehicleResult) {
|
||||
logger.error(`Failed to get vehicle by ID: ${vehicleId}`);
|
||||
return res.status(500).json({
|
||||
error: `Failed to get vehicle by ID: ${vehicleId}`,
|
||||
});
|
||||
}
|
||||
return res.status(200).json(getVehicleResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a vehicle.
|
||||
*
|
||||
* @param {Object} req - The request object.
|
||||
* @param {Object} res - The response object.
|
||||
*
|
||||
* @return {Promise<Response>} A promise that resolves to the response JSON object.
|
||||
*/
|
||||
async function deleteVehicle(req: Request, res: Response): Promise<Response> {
|
||||
const vehicleId = req.params["vehicleId"];
|
||||
if (!vehicleId || vehicleId.length !== 36) {
|
||||
if (isDebugMode()) logger.error("Vehicle ID is missing or not valid");
|
||||
return res.status(400).json({
|
||||
error: "Vehicle ID is missing or not valid",
|
||||
});
|
||||
}
|
||||
const deleteResult = await VehicleService.delete(vehicleId);
|
||||
if (!deleteResult) {
|
||||
logger.error(`Failed to delete vehicle with ID: ${vehicleId}`);
|
||||
return res.status(500).json({
|
||||
error: `Failed to delete vehicle with ID: ${vehicleId}`,
|
||||
});
|
||||
}
|
||||
logger.info(`Vehicle deleted successfully ! (ID: ${vehicleId})`);
|
||||
return res.status(200).json({
|
||||
message: "Vehicle deleted successfully",
|
||||
});
|
||||
}
|
||||
|
||||
if (isDebugMode()) logger.debug("\nController loaded.");
|
||||
|
||||
const VehicleController = {
|
||||
create: createVehicle,
|
||||
update: updateVehicle,
|
||||
getAll: getAllVehicle,
|
||||
delete: deleteVehicle,
|
||||
getById: getVehicleById,
|
||||
getAvailable: getAvailableVehicle,
|
||||
};
|
||||
|
||||
export default VehicleController;
|
||||
@ -1,27 +1,28 @@
|
||||
import AdminGuard from "@validators/AdminGuard";
|
||||
import UserGuard from "@validators/UserGuard";
|
||||
import express, { type Router } from "express";
|
||||
import VehicleController from "@controllers/vehicle.controller";
|
||||
|
||||
const RentRouter: Router = express.Router();
|
||||
|
||||
// Get rent affected to the user
|
||||
RentRouter.route("/affected").get(UserGuard);
|
||||
|
||||
// Get all vehicle in rent (admin only)
|
||||
// Get all vehicle in rent (admin only) //TODO Non implemented yet
|
||||
RentRouter.route("/affected/all").get(AdminGuard);
|
||||
|
||||
// Add a new vehicle (admin only)
|
||||
RentRouter.route("/veh/new").post(AdminGuard);
|
||||
|
||||
// Get all vehicles
|
||||
RentRouter.route("/veh/all").get();
|
||||
RentRouter.route("/veh/all").get(VehicleController.getAll);
|
||||
|
||||
// Rent a specific vehicle
|
||||
RentRouter.route("/veh/rent/:vehicleId").post(UserGuard);
|
||||
|
||||
RentRouter.route("/veh/:vehicleId")
|
||||
.get(UserGuard)
|
||||
.patch(AdminGuard)
|
||||
.delete(AdminGuard);
|
||||
.get(UserGuard, VehicleController.getById)
|
||||
.patch(AdminGuard, VehicleController.update)
|
||||
.delete(AdminGuard, VehicleController.delete);
|
||||
|
||||
export default RentRouter;
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
import type { IDbVehicle } from "@interfaces/database/IDbVehicle";
|
||||
//import { ErrorType, type ISError } from "@interfaces/services/ISError";
|
||||
import MySqlService from "@services/mysql.service";
|
||||
import { isDebugMode } from "@utils/debugState";
|
||||
import { Logger } from "tslog";
|
||||
import { v4 } from "uuid";
|
||||
import {IDbVehicle} from "@interfaces/database/IDbVehicle";
|
||||
|
||||
const logger = new Logger({
|
||||
name: "VehicleService",
|
||||
@ -19,8 +19,8 @@ async function createVehicleService(data: IDbVehicle) {
|
||||
plate_number: data.plate_number,
|
||||
model_id: data.model_id,
|
||||
odometer: data.odometer | 0,
|
||||
health_state: data.health_state
|
||||
})
|
||||
health_state: data.health_state,
|
||||
});
|
||||
if (result.affectedRows !== 0) {
|
||||
logger.info("\n\n> Success !");
|
||||
return true;
|
||||
@ -36,14 +36,14 @@ async function updateVehicleService(data: IDbVehicle) {
|
||||
if (isDebugMode()) logger.debug(`\n\n> Updating vehicle...\n`);
|
||||
try {
|
||||
if (!data.id) {
|
||||
return false
|
||||
return false;
|
||||
}
|
||||
const result = await MySqlService.Vehicle.update(DbHandler, {
|
||||
id: data.id,
|
||||
plate_number: data.plate_number,
|
||||
model_id: data.model_id,
|
||||
odometer: data.odometer | 0,
|
||||
health_state: data.health_state
|
||||
health_state: data.health_state,
|
||||
});
|
||||
if (result.affectedRows !== 0) {
|
||||
logger.info("\n\n> Success !");
|
||||
@ -62,7 +62,7 @@ async function getAllVehiclesService() {
|
||||
return {
|
||||
iat: Date.now(),
|
||||
vehicles: result,
|
||||
total: result.length
|
||||
total: result.length,
|
||||
};
|
||||
} catch (error) {
|
||||
logger.error(`\n\n> Error getting vehicles: \n${error}\n`);
|
||||
@ -75,7 +75,7 @@ async function getVehicleByIdService(vehicleId: string) {
|
||||
const result = await MySqlService.Vehicle.getById(DbHandler, vehicleId);
|
||||
return {
|
||||
iat: Date.now(),
|
||||
vehicle: result
|
||||
vehicle: result,
|
||||
};
|
||||
} catch (error) {
|
||||
logger.error(`\n\n> Error getting vehicle by id: \n${error}\n`);
|
||||
@ -89,7 +89,7 @@ async function getAvailableVehicleService() {
|
||||
return {
|
||||
iat: Date.now(),
|
||||
vehicles: result,
|
||||
total: result.length
|
||||
total: result.length,
|
||||
};
|
||||
} catch (error) {
|
||||
logger.error(`\n\n> Error getting available vehicles: \n${error}\n`);
|
||||
@ -99,7 +99,6 @@ async function getAvailableVehicleService() {
|
||||
|
||||
async function deleteVehicleService(vehicleId: string) {
|
||||
try {
|
||||
//TODO DELETE
|
||||
const result = await MySqlService.Vehicle.delete(DbHandler, vehicleId);
|
||||
if (result.affectedRows !== 0) {
|
||||
logger.info("\n\n> Success !");
|
||||
@ -112,7 +111,6 @@ async function deleteVehicleService(vehicleId: string) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (isDebugMode()) logger.debug("\nService loaded.");
|
||||
|
||||
const VehicleService = {
|
||||
@ -121,7 +119,7 @@ const VehicleService = {
|
||||
getAll: getAllVehiclesService,
|
||||
getById: getVehicleByIdService,
|
||||
delete: deleteVehicleService,
|
||||
getAvailable: getAvailableVehicleService
|
||||
}
|
||||
getAvailable: getAvailableVehicleService,
|
||||
};
|
||||
|
||||
export default VehicleService;
|
||||
Loading…
x
Reference in New Issue
Block a user