"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