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

145 lines
5.8 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.findMany = findMany;
exports.findById = findById;
exports.findFirst = findFirst;
exports.create = create;
exports.updateById = updateById;
exports.softDelete = softDelete;
exports.setPublished = setPublished;
exports.findReservationConflicts = findReservationConflicts;
exports.findCalendarBlockConflicts = findCalendarBlockConflicts;
exports.findCalendarEvents = findCalendarEvents;
exports.createCalendarBlock = createCalendarBlock;
exports.deleteCalendarBlock = deleteCalendarBlock;
exports.findMaintenanceLogs = findMaintenanceLogs;
exports.createMaintenanceLog = createMaintenanceLog;
exports.findPricingConfiguration = findPricingConfiguration;
exports.createPricingConfiguration = createPricingConfiguration;
exports.updatePricingConfiguration = updatePricingConfiguration;
exports.findPricingRule = findPricingRule;
exports.createPricingRule = createPricingRule;
exports.updatePricingRule = updatePricingRule;
exports.deletePricingRule = deletePricingRule;
exports.createPriceHistory = createPriceHistory;
const prisma_1 = require("../../lib/prisma");
async function findMany(where, skip, take) {
return Promise.all([
prisma_1.prisma.vehicle.findMany({ where, skip, take, orderBy: { createdAt: 'desc' } }),
prisma_1.prisma.vehicle.count({ where }),
]);
}
async function findById(id, companyId) {
return prisma_1.prisma.vehicle.findFirst({ where: { id, companyId } });
}
async function findFirst(id, companyId) {
return prisma_1.prisma.vehicle.findFirst({ where: { id, companyId } });
}
async function create(data) {
return prisma_1.prisma.vehicle.create({ data });
}
async function updateById(id, data) {
return prisma_1.prisma.vehicle.update({ where: { id }, data });
}
async function softDelete(id, companyId) {
return prisma_1.prisma.vehicle.updateMany({ where: { id, companyId }, data: { status: 'OUT_OF_SERVICE', isPublished: false } });
}
async function setPublished(id, companyId, isPublished) {
return prisma_1.prisma.vehicle.updateMany({ where: { id, companyId }, data: { isPublished } });
}
async function findReservationConflicts(vehicleId, companyId, start, end) {
return prisma_1.prisma.reservation.findMany({
where: {
vehicleId,
companyId,
status: { in: ['CONFIRMED', 'ACTIVE'] },
startDate: { lt: end },
endDate: { gt: start },
},
select: { id: true, startDate: true, endDate: true, status: true },
});
}
async function findCalendarBlockConflicts(vehicleId, start, end) {
return prisma_1.prisma.vehicleCalendarBlock.findMany({
where: { vehicleId, startDate: { lt: end }, endDate: { gt: start } },
select: { id: true, startDate: true, endDate: true, type: true, reason: true },
});
}
async function findCalendarEvents(vehicleId, companyId, rangeStart, rangeEnd) {
return Promise.all([
prisma_1.prisma.reservation.findMany({
where: {
vehicleId,
companyId,
status: { in: ['DRAFT', 'CONFIRMED', 'ACTIVE'] },
startDate: { lt: rangeEnd },
endDate: { gt: rangeStart },
},
select: {
id: true, startDate: true, endDate: true, status: true,
customer: { select: { firstName: true, lastName: true } },
},
orderBy: { startDate: 'asc' },
}),
prisma_1.prisma.vehicleCalendarBlock.findMany({
where: { vehicleId, startDate: { lt: rangeEnd }, endDate: { gt: rangeStart } },
orderBy: { startDate: 'asc' },
}),
]);
}
async function createCalendarBlock(data) {
return prisma_1.prisma.vehicleCalendarBlock.create({ data });
}
async function deleteCalendarBlock(id, vehicleId) {
return prisma_1.prisma.vehicleCalendarBlock.deleteMany({ where: { id, vehicleId } });
}
async function findMaintenanceLogs(vehicleId) {
return prisma_1.prisma.maintenanceLog.findMany({ where: { vehicleId }, orderBy: { performedAt: 'desc' } });
}
async function createMaintenanceLog(data) {
return prisma_1.prisma.maintenanceLog.create({ data });
}
async function findPricingConfiguration(vehicleId) {
return prisma_1.prisma.vehiclePricingConfiguration.findUnique({
where: { vehicleId },
include: {
rules: { orderBy: [{ sortOrder: 'asc' }, { startDate: 'asc' }, { createdAt: 'asc' }] },
history: { orderBy: { createdAt: 'desc' }, take: 20 },
},
});
}
async function createPricingConfiguration(data) {
return prisma_1.prisma.vehiclePricingConfiguration.create({
data,
include: {
rules: { orderBy: [{ sortOrder: 'asc' }, { startDate: 'asc' }, { createdAt: 'asc' }] },
history: { orderBy: { createdAt: 'desc' }, take: 20 },
},
});
}
async function updatePricingConfiguration(id, data) {
return prisma_1.prisma.vehiclePricingConfiguration.update({
where: { id },
data,
include: {
rules: { orderBy: [{ sortOrder: 'asc' }, { startDate: 'asc' }, { createdAt: 'asc' }] },
history: { orderBy: { createdAt: 'desc' }, take: 20 },
},
});
}
async function findPricingRule(id, configurationId) {
return prisma_1.prisma.vehiclePricingRule.findFirst({ where: { id, configurationId } });
}
async function createPricingRule(data) {
return prisma_1.prisma.vehiclePricingRule.create({ data });
}
async function updatePricingRule(id, data) {
return prisma_1.prisma.vehiclePricingRule.update({ where: { id }, data });
}
async function deletePricingRule(id, configurationId) {
return prisma_1.prisma.vehiclePricingRule.deleteMany({ where: { id, configurationId } });
}
async function createPriceHistory(data) {
return prisma_1.prisma.vehiclePriceHistory.create({ data });
}
//# sourceMappingURL=vehicle.repo.js.map