163 lines
6.3 KiB
JavaScript
163 lines
6.3 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.findMany = findMany;
|
|
exports.findById = findById;
|
|
exports.findByIdSimple = findByIdSimple;
|
|
exports.findByIdWithRelations = findByIdWithRelations;
|
|
exports.findByIdForCheckout = findByIdForCheckout;
|
|
exports.findForLicenseCheck = findForLicenseCheck;
|
|
exports.findForContract = findForContract;
|
|
exports.findForBilling = findForBilling;
|
|
exports.findForClose = findForClose;
|
|
exports.findForInspection = findForInspection;
|
|
exports.findConflict = findConflict;
|
|
exports.create = create;
|
|
exports.updateById = updateById;
|
|
exports.findActiveOffer = findActiveOffer;
|
|
exports.incrementOfferRedemption = incrementOfferRedemption;
|
|
exports.findVehicle = findVehicle;
|
|
exports.findCustomer = findCustomer;
|
|
exports.findCustomerById = findCustomerById;
|
|
exports.updateVehicleStatus = updateVehicleStatus;
|
|
exports.findCompanyWithBrand = findCompanyWithBrand;
|
|
exports.findBrandLocale = findBrandLocale;
|
|
exports.findInspections = findInspections;
|
|
exports.findAdditionalDriver = findAdditionalDriver;
|
|
exports.updateAdditionalDriver = updateAdditionalDriver;
|
|
const prisma_1 = require("../../lib/prisma");
|
|
const FULL_INCLUDE = {
|
|
vehicle: true,
|
|
customer: true,
|
|
insurances: true,
|
|
additionalDrivers: true,
|
|
rentalPayments: true,
|
|
damageReports: true,
|
|
};
|
|
async function findMany(where, skip, take) {
|
|
return Promise.all([
|
|
prisma_1.prisma.reservation.findMany({
|
|
where,
|
|
include: { vehicle: true, customer: true },
|
|
skip,
|
|
take,
|
|
orderBy: { createdAt: 'desc' },
|
|
}),
|
|
prisma_1.prisma.reservation.count({ where }),
|
|
]);
|
|
}
|
|
async function findById(id, companyId) {
|
|
return prisma_1.prisma.reservation.findFirstOrThrow({ where: { id, companyId }, include: FULL_INCLUDE });
|
|
}
|
|
async function findByIdSimple(id, companyId) {
|
|
return prisma_1.prisma.reservation.findFirstOrThrow({ where: { id, companyId } });
|
|
}
|
|
async function findByIdWithRelations(id, companyId) {
|
|
return prisma_1.prisma.reservation.findFirstOrThrow({
|
|
where: { id, companyId },
|
|
include: { insurances: true, additionalDrivers: true },
|
|
});
|
|
}
|
|
async function findByIdForCheckout(id, companyId) {
|
|
return prisma_1.prisma.reservation.findFirstOrThrow({
|
|
where: { id, companyId },
|
|
include: { vehicle: true },
|
|
});
|
|
}
|
|
async function findForLicenseCheck(id, companyId) {
|
|
return prisma_1.prisma.reservation.findFirstOrThrow({
|
|
where: { id, companyId },
|
|
include: { customer: true, additionalDrivers: true },
|
|
});
|
|
}
|
|
async function findForContract(id, companyId) {
|
|
return prisma_1.prisma.reservation.findFirstOrThrow({
|
|
where: { id, companyId },
|
|
include: {
|
|
vehicle: true,
|
|
customer: true,
|
|
insurances: true,
|
|
additionalDrivers: true,
|
|
rentalPayments: { orderBy: { createdAt: 'asc' } },
|
|
inspections: { include: { damagePoints: true }, orderBy: { inspectedAt: 'asc' } },
|
|
company: { include: { brand: true, contractSettings: true, accountingSettings: true } },
|
|
},
|
|
});
|
|
}
|
|
async function findForBilling(id, companyId) {
|
|
return prisma_1.prisma.reservation.findFirstOrThrow({
|
|
where: { id, companyId },
|
|
include: { vehicle: true, insurances: true, additionalDrivers: true },
|
|
});
|
|
}
|
|
async function findForClose(id, companyId) {
|
|
return prisma_1.prisma.reservation.findFirstOrThrow({ where: { id, companyId }, include: { customer: true } });
|
|
}
|
|
async function findForInspection(id, companyId) {
|
|
return prisma_1.prisma.reservation.findFirstOrThrow({
|
|
where: { id, companyId },
|
|
include: { vehicle: true, customer: true },
|
|
});
|
|
}
|
|
async function findConflict(vehicleId, start, end, excludeId) {
|
|
return prisma_1.prisma.reservation.findFirst({
|
|
where: {
|
|
vehicleId,
|
|
status: { in: ['CONFIRMED', 'ACTIVE'] },
|
|
startDate: { lt: end },
|
|
endDate: { gt: start },
|
|
...(excludeId ? { id: { not: excludeId } } : {}),
|
|
},
|
|
});
|
|
}
|
|
async function create(data) {
|
|
return prisma_1.prisma.reservation.create({ data, include: { vehicle: true, customer: true } });
|
|
}
|
|
async function updateById(id, data) {
|
|
return prisma_1.prisma.reservation.update({ where: { id }, data });
|
|
}
|
|
async function findActiveOffer(companyId, promoCode) {
|
|
return prisma_1.prisma.offer.findFirst({
|
|
where: { companyId, promoCode, isActive: true, validFrom: { lte: new Date() }, validUntil: { gte: new Date() } },
|
|
});
|
|
}
|
|
async function incrementOfferRedemption(offerId) {
|
|
return prisma_1.prisma.offer.update({ where: { id: offerId }, data: { redemptionCount: { increment: 1 } } });
|
|
}
|
|
async function findVehicle(vehicleId, companyId) {
|
|
return prisma_1.prisma.vehicle.findFirstOrThrow({ where: { id: vehicleId, companyId } });
|
|
}
|
|
async function findCustomer(customerId, companyId) {
|
|
return prisma_1.prisma.customer.findFirstOrThrow({ where: { id: customerId, companyId } });
|
|
}
|
|
async function findCustomerById(customerId) {
|
|
return prisma_1.prisma.customer.findUniqueOrThrow({ where: { id: customerId } });
|
|
}
|
|
async function updateVehicleStatus(vehicleId, status, mileage) {
|
|
return prisma_1.prisma.vehicle.update({
|
|
where: { id: vehicleId },
|
|
data: { status: status, ...(mileage !== undefined ? { mileage } : {}) },
|
|
});
|
|
}
|
|
async function findCompanyWithBrand(companyId) {
|
|
return prisma_1.prisma.company.findUnique({
|
|
where: { id: companyId },
|
|
include: { brand: { select: { displayName: true, defaultLocale: true } } },
|
|
});
|
|
}
|
|
async function findBrandLocale(companyId) {
|
|
return prisma_1.prisma.brandSettings.findUnique({ where: { companyId }, select: { defaultLocale: true } });
|
|
}
|
|
async function findInspections(reservationId, companyId) {
|
|
return prisma_1.prisma.damageInspection.findMany({
|
|
where: { reservationId, companyId },
|
|
include: { damagePoints: true },
|
|
orderBy: { inspectedAt: 'asc' },
|
|
});
|
|
}
|
|
async function findAdditionalDriver(driverId, reservationId, companyId) {
|
|
return prisma_1.prisma.additionalDriver.findFirstOrThrow({ where: { id: driverId, reservationId, companyId } });
|
|
}
|
|
async function updateAdditionalDriver(id, data) {
|
|
return prisma_1.prisma.additionalDriver.update({ where: { id }, data });
|
|
}
|
|
//# sourceMappingURL=reservation.repo.js.map
|