Files
alrahma_sunday_school_api/apps/api/dist/modules/reservations/reservation.repo.js
T
2026-06-11 03:22:12 -04:00

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