archetecture security fix
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.calculateAdditionalDriverCharge = calculateAdditionalDriverCharge;
|
||||
exports.applyAdditionalDriversToReservation = applyAdditionalDriversToReservation;
|
||||
const prisma_1 = require("../lib/prisma");
|
||||
const licenseValidationService_1 = require("./licenseValidationService");
|
||||
function calculateAdditionalDriverCharge(chargeType, chargeValue, totalDays) {
|
||||
switch (chargeType) {
|
||||
case 'PER_DAY':
|
||||
return chargeValue * totalDays;
|
||||
case 'FLAT':
|
||||
return chargeValue;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
async function applyAdditionalDriversToReservation(reservationId, companyId, drivers, totalDays) {
|
||||
if (drivers.length === 0) {
|
||||
return { records: [], additionalDriverTotal: 0, requiresManualApproval: false };
|
||||
}
|
||||
const settings = await prisma_1.prisma.contractSettings.findUnique({ where: { companyId } });
|
||||
const chargeType = settings?.additionalDriverCharge ?? 'FREE';
|
||||
const chargeValue = chargeType === 'PER_DAY'
|
||||
? settings?.additionalDriverDailyRate ?? 0
|
||||
: chargeType === 'FLAT'
|
||||
? settings?.additionalDriverFlatRate ?? 0
|
||||
: 0;
|
||||
const records = drivers.map((driver) => {
|
||||
const licenseResult = (0, licenseValidationService_1.validateLicense)(driver.licenseExpiry ? new Date(driver.licenseExpiry) : null);
|
||||
const totalCharge = calculateAdditionalDriverCharge(chargeType, chargeValue, totalDays);
|
||||
return {
|
||||
reservationId,
|
||||
companyId,
|
||||
firstName: driver.firstName,
|
||||
lastName: driver.lastName,
|
||||
email: driver.email ?? null,
|
||||
phone: driver.phone ?? null,
|
||||
driverLicense: driver.driverLicense,
|
||||
licenseExpiry: driver.licenseExpiry ? new Date(driver.licenseExpiry) : null,
|
||||
licenseIssuedAt: driver.licenseIssuedAt ? new Date(driver.licenseIssuedAt) : null,
|
||||
dateOfBirth: driver.dateOfBirth ? new Date(driver.dateOfBirth) : null,
|
||||
nationality: driver.nationality ?? null,
|
||||
chargeType,
|
||||
chargeValue,
|
||||
totalCharge,
|
||||
licenseExpired: licenseResult.status === 'EXPIRED',
|
||||
licenseExpiringSoon: licenseResult.status === 'EXPIRING',
|
||||
requiresApproval: licenseResult.requiresApproval,
|
||||
approvalNote: licenseResult.requiresApproval ? licenseResult.message : null,
|
||||
};
|
||||
});
|
||||
const additionalDriverTotal = records.reduce((sum, record) => sum + record.totalCharge, 0);
|
||||
await prisma_1.prisma.$transaction([
|
||||
prisma_1.prisma.additionalDriver.createMany({ data: records }),
|
||||
prisma_1.prisma.reservation.update({
|
||||
where: { id: reservationId },
|
||||
data: {
|
||||
additionalDriverTotal,
|
||||
totalAmount: { increment: additionalDriverTotal },
|
||||
},
|
||||
}),
|
||||
]);
|
||||
return {
|
||||
records,
|
||||
additionalDriverTotal,
|
||||
requiresManualApproval: records.some((record) => record.requiresApproval),
|
||||
};
|
||||
}
|
||||
//# sourceMappingURL=additionalDriverService.js.map
|
||||
Reference in New Issue
Block a user