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 AdminGuard from "@validators/AdminGuard";
|
||||||
import UserGuard from "@validators/UserGuard";
|
import UserGuard from "@validators/UserGuard";
|
||||||
import express, { type Router } from "express";
|
import express, { type Router } from "express";
|
||||||
|
import VehicleController from "@controllers/vehicle.controller";
|
||||||
|
|
||||||
const RentRouter: Router = express.Router();
|
const RentRouter: Router = express.Router();
|
||||||
|
|
||||||
// Get rent affected to the user
|
// Get rent affected to the user
|
||||||
RentRouter.route("/affected").get(UserGuard);
|
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);
|
RentRouter.route("/affected/all").get(AdminGuard);
|
||||||
|
|
||||||
// Add a new vehicle (admin only)
|
// Add a new vehicle (admin only)
|
||||||
RentRouter.route("/veh/new").post(AdminGuard);
|
RentRouter.route("/veh/new").post(AdminGuard);
|
||||||
|
|
||||||
// Get all vehicles
|
// Get all vehicles
|
||||||
RentRouter.route("/veh/all").get();
|
RentRouter.route("/veh/all").get(VehicleController.getAll);
|
||||||
|
|
||||||
// Rent a specific vehicle
|
// Rent a specific vehicle
|
||||||
RentRouter.route("/veh/rent/:vehicleId").post(UserGuard);
|
RentRouter.route("/veh/rent/:vehicleId").post(UserGuard);
|
||||||
|
|
||||||
RentRouter.route("/veh/:vehicleId")
|
RentRouter.route("/veh/:vehicleId")
|
||||||
.get(UserGuard)
|
.get(UserGuard, VehicleController.getById)
|
||||||
.patch(AdminGuard)
|
.patch(AdminGuard, VehicleController.update)
|
||||||
.delete(AdminGuard);
|
.delete(AdminGuard, VehicleController.delete);
|
||||||
|
|
||||||
export default RentRouter;
|
export default RentRouter;
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
|
import type { IDbVehicle } from "@interfaces/database/IDbVehicle";
|
||||||
//import { ErrorType, type ISError } from "@interfaces/services/ISError";
|
//import { ErrorType, type ISError } from "@interfaces/services/ISError";
|
||||||
import MySqlService from "@services/mysql.service";
|
import MySqlService from "@services/mysql.service";
|
||||||
import { isDebugMode } from "@utils/debugState";
|
import { isDebugMode } from "@utils/debugState";
|
||||||
import { Logger } from "tslog";
|
import { Logger } from "tslog";
|
||||||
import { v4 } from "uuid";
|
import { v4 } from "uuid";
|
||||||
import {IDbVehicle} from "@interfaces/database/IDbVehicle";
|
|
||||||
|
|
||||||
const logger = new Logger({
|
const logger = new Logger({
|
||||||
name: "VehicleService",
|
name: "VehicleService",
|
||||||
@ -19,8 +19,8 @@ async function createVehicleService(data: IDbVehicle) {
|
|||||||
plate_number: data.plate_number,
|
plate_number: data.plate_number,
|
||||||
model_id: data.model_id,
|
model_id: data.model_id,
|
||||||
odometer: data.odometer | 0,
|
odometer: data.odometer | 0,
|
||||||
health_state: data.health_state
|
health_state: data.health_state,
|
||||||
})
|
});
|
||||||
if (result.affectedRows !== 0) {
|
if (result.affectedRows !== 0) {
|
||||||
logger.info("\n\n> Success !");
|
logger.info("\n\n> Success !");
|
||||||
return true;
|
return true;
|
||||||
@ -36,24 +36,24 @@ async function updateVehicleService(data: IDbVehicle) {
|
|||||||
if (isDebugMode()) logger.debug(`\n\n> Updating vehicle...\n`);
|
if (isDebugMode()) logger.debug(`\n\n> Updating vehicle...\n`);
|
||||||
try {
|
try {
|
||||||
if (!data.id) {
|
if (!data.id) {
|
||||||
return false
|
return false;
|
||||||
}
|
}
|
||||||
const result = await MySqlService.Vehicle.update(DbHandler, {
|
const result = await MySqlService.Vehicle.update(DbHandler, {
|
||||||
id: data.id,
|
id: data.id,
|
||||||
plate_number: data.plate_number,
|
plate_number: data.plate_number,
|
||||||
model_id: data.model_id,
|
model_id: data.model_id,
|
||||||
odometer: data.odometer | 0,
|
odometer: data.odometer | 0,
|
||||||
health_state: data.health_state
|
health_state: data.health_state,
|
||||||
});
|
});
|
||||||
if (result.affectedRows !== 0) {
|
if (result.affectedRows !== 0) {
|
||||||
logger.info("\n\n> Success !");
|
logger.info("\n\n> Success !");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`\n\n> Error updating vehicle: \n${error}\n`);
|
logger.error(`\n\n> Error updating vehicle: \n${error}\n`);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getAllVehiclesService() {
|
async function getAllVehiclesService() {
|
||||||
@ -62,7 +62,7 @@ async function getAllVehiclesService() {
|
|||||||
return {
|
return {
|
||||||
iat: Date.now(),
|
iat: Date.now(),
|
||||||
vehicles: result,
|
vehicles: result,
|
||||||
total: result.length
|
total: result.length,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`\n\n> Error getting vehicles: \n${error}\n`);
|
logger.error(`\n\n> Error getting vehicles: \n${error}\n`);
|
||||||
@ -72,15 +72,15 @@ async function getAllVehiclesService() {
|
|||||||
|
|
||||||
async function getVehicleByIdService(vehicleId: string) {
|
async function getVehicleByIdService(vehicleId: string) {
|
||||||
try {
|
try {
|
||||||
const result = await MySqlService.Vehicle.getById(DbHandler, vehicleId);
|
const result = await MySqlService.Vehicle.getById(DbHandler, vehicleId);
|
||||||
return {
|
return {
|
||||||
iat: Date.now(),
|
iat: Date.now(),
|
||||||
vehicle: result
|
vehicle: result,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`\n\n> Error getting vehicle by id: \n${error}\n`);
|
logger.error(`\n\n> Error getting vehicle by id: \n${error}\n`);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getAvailableVehicleService() {
|
async function getAvailableVehicleService() {
|
||||||
@ -89,30 +89,28 @@ async function getAvailableVehicleService() {
|
|||||||
return {
|
return {
|
||||||
iat: Date.now(),
|
iat: Date.now(),
|
||||||
vehicles: result,
|
vehicles: result,
|
||||||
total: result.length
|
total: result.length,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`\n\n> Error getting available vehicles: \n${error}\n`);
|
logger.error(`\n\n> Error getting available vehicles: \n${error}\n`);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function deleteVehicleService(vehicleId: string) {
|
async function deleteVehicleService(vehicleId: string) {
|
||||||
try {
|
try {
|
||||||
//TODO DELETE
|
const result = await MySqlService.Vehicle.delete(DbHandler, vehicleId);
|
||||||
const result = await MySqlService.Vehicle.delete(DbHandler, vehicleId);
|
if (result.affectedRows !== 0) {
|
||||||
if (result.affectedRows !== 0) {
|
logger.info("\n\n> Success !");
|
||||||
logger.info("\n\n> Success !");
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
return false;
|
||||||
return false;
|
} catch (error) {
|
||||||
} catch (error) {
|
logger.error(`\n\n> Error deleting vehicle: \n${error}\n`);
|
||||||
logger.error(`\n\n> Error deleting vehicle: \n${error}\n`);
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (isDebugMode()) logger.debug("\nService loaded.");
|
if (isDebugMode()) logger.debug("\nService loaded.");
|
||||||
|
|
||||||
const VehicleService = {
|
const VehicleService = {
|
||||||
@ -121,7 +119,7 @@ const VehicleService = {
|
|||||||
getAll: getAllVehiclesService,
|
getAll: getAllVehiclesService,
|
||||||
getById: getVehicleByIdService,
|
getById: getVehicleByIdService,
|
||||||
delete: deleteVehicleService,
|
delete: deleteVehicleService,
|
||||||
getAvailable: getAvailableVehicleService
|
getAvailable: getAvailableVehicleService,
|
||||||
}
|
};
|
||||||
|
|
||||||
export default VehicleService;
|
export default VehicleService;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user