From ec53fcb2479cccfc79d277d1087b91353cdd44a1 Mon Sep 17 00:00:00 2001 From: Mathis Date: Fri, 3 May 2024 12:00:48 +0200 Subject: [PATCH] feat(services): add rent service functions This commit introduces new functions to handle rental services in the src/services/rent.service.ts. Functions created handle rental CRUD operations such as createRentService, updateRentService, deleteRentService, also additional utility functions such as getUserRentService and getRentByIdService that deal with user-associated rentals were introduced. These new functions serve to simplify rental management and improve our services for rental handling. Issue: #24 Signed-off-by: Mathis --- src/services/rent.service.ts | 176 +++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 src/services/rent.service.ts diff --git a/src/services/rent.service.ts b/src/services/rent.service.ts new file mode 100644 index 0000000..00beb8e --- /dev/null +++ b/src/services/rent.service.ts @@ -0,0 +1,176 @@ +//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 IDbRent from "@interfaces/database/IDbRent"; +import {body} from "express-validator"; + +const logger = new Logger({ + name: "RentService", +}); + +const DbHandler = new MySqlService.Handler("RentService"); + +async function createRentService(data: IDbRent): Promise { + if (isDebugMode()) logger.debug(`\n\n> Creating a new rent...\n`); + const wantedVehicleId = data.id; + const targetUserId = data.user_id; + if (!targetUserId || !wantedVehicleId) { + logger.error(`Missing targetUserId or targetVehicleId`); + return false; + } + const userIfExist = await MySqlService.User.getById(DbHandler, targetUserId); + if (!userIfExist[0]) { + logger.error(`User does not exist`); + return false; + } + const targetUser = userIfExist[0] + if (!targetUser.id) return false; + const vehicleIfExist = await MySqlService.Vehicle.getById(DbHandler, wantedVehicleId); + if (!vehicleIfExist[0] || !vehicleIfExist[0].id) { + logger.error(`Vehicle does not exist`); + return false; + } + const vehicleId = vehicleIfExist[0].id + try { + const result = await MySqlService.Rent.insert(DbHandler, { + id: v4(), + vehicle_id: vehicleId, + user_id: targetUser.id, + active: data.active, + iat: new Date(Date.parse(`${data.iat}`)), + eat: new Date(Date.parse(`${data.eat}`)), + need_survey: data.need_survey, + km_at_start: Number.parseInt(`${data.km_at_start}`) + }); + if (result.affectedRows !== 0) { + logger.info("\n\n> Success !"); + return true; + } + return false; + } catch (error) { + logger.error(`\n\n> Error creating category: \n${error}\n`); + return false; + } +} + +async function updateRentService(data: IDbRent) { + if (isDebugMode()) logger.debug(`\n\n> Updating a rent...\n`); + const wantedVehicleId = data.id; + const targetUserId = data.user_id; + if (!targetUserId || !wantedVehicleId || !data.id) { + logger.error(`Missing targetUserId or targetVehicleId`); + return false; + } + const rentIfExist = await MySqlService.Rent.getById(DbHandler, data.id); + if (!rentIfExist[0]) { + logger.error(`Rent does not exist`); + return false; + } + const rentId = rentIfExist[0].id; + if (!rentId) { + logger.error(`RentId does not exist`); + return false; + } + + const userIfExist = await MySqlService.User.getById(DbHandler, targetUserId); + if (!userIfExist[0]) { + logger.error(`User does not exist`); + return false; + } + const targetUser = userIfExist[0] + if (!targetUser.id) return false; + const vehicleIfExist = await MySqlService.Vehicle.getById(DbHandler, wantedVehicleId); + if (!vehicleIfExist[0] || !vehicleIfExist[0].id) { + logger.error(`Vehicle does not exist`); + return false; + } + const vehicleId = vehicleIfExist[0].id + try { + const result = await MySqlService.Rent.update(DbHandler, { + id: rentId, + vehicle_id: vehicleId, + user_id: targetUser.id, + active: data.active, + iat: new Date(Date.parse(`${data.iat}`)), + eat: new Date(Date.parse(`${data.eat}`)), + need_survey: data.need_survey, + km_at_start: Number.parseInt(`${data.km_at_start}`) + }); + if (result.affectedRows !== 0) { + logger.info("\n\n> Success !"); + return true; + } + return false; + } catch (error) { + logger.error(`\n\n> Error updating category: \n${error}\n`); + return false; + } +} + +async function getAllAssignedRentService() { + const result = await MySqlService.Rent.getAllAssigned(DbHandler); + if (result.length > 0) { + return result; + } + logger.warn(`No assigned rents found`); + return []; +} + +async function getRentByIdService(rentId: string) { + if (!rentId || rentId.length !== 36) { + logger.warn(`Id missing or not conform`) + return false; + } + const rent = await MySqlService.Rent.getById(DbHandler, rentId); + if (rent.length > 0) { + return rent[0]; + } + logger.warn(`Rent not found`); + return null; +} + +async function deleteRentService(rentId: string) { + const rentIfExist = await MySqlService.Rent.getById(DbHandler, rentId); + if (!rentIfExist[0]) { + logger.error(`Rent does not exist`); + return false; + } + const target = rentIfExist[0] + if (!target.id) return false; + try { + const result = await MySqlService.Rent.delete(DbHandler, target.id); + if (result.affectedRows !== 0) { + logger.info("\n\n> Success !"); + return true; + } + return false; + } +} + +async function getUserRentService(userId: string) { + if (!userId) { + logger.warn(`Missing userId`); + return false; + } + const rents = await MySqlService.Rent.getAssignedToUser(DbHandler, userId); + if (rents.length > 0) { + return rents; + } + logger.warn(`No rents found for user`); + return false; +} + +if (isDebugMode()) logger.debug("\nService loaded."); + +const VehicleService = { + create: createRentService, + update: updateRentService, + getAll: getAllAssignedRentService, + getById: getRentByIdService, + delete: deleteRentService, + getUserRent: getUserRentService, +}; + +export default VehicleService;