"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.findCompanyBySlug = findCompanyBySlug; exports.findPublishedVehicles = findPublishedVehicles; exports.findVehicleById = findVehicleById; exports.findActiveOffers = findActiveOffers; exports.findInsurancePolicies = findInsurancePolicies; exports.findOfferByPromoCode = findOfferByPromoCode; exports.upsertCustomer = upsertCustomer; exports.createReservation = createReservation; exports.findReservationWithDetails = findReservationWithDetails; exports.findBooking = findBooking; exports.findReservationForPayment = findReservationForPayment; exports.createRentalPayment = createRentalPayment; exports.findPaymentByPaypalOrderId = findPaymentByPaypalOrderId; exports.capturePaypalPayment = capturePaypalPayment; exports.createReservationPublicAccess = createReservationPublicAccess; exports.findReservationPublicAccess = findReservationPublicAccess; exports.markReservationPublicAccessUsed = markReservationPublicAccessUsed; const prisma_1 = require("../../lib/prisma"); async function findCompanyBySlug(slug) { return prisma_1.prisma.company.findFirstOrThrow({ where: { slug, status: { in: ['ACTIVE', 'TRIALING', 'PAST_DUE', 'SUSPENDED'] } }, include: { brand: true, contractSettings: true }, }); } async function findPublishedVehicles(companyId) { return prisma_1.prisma.vehicle.findMany({ where: { companyId, isPublished: true }, orderBy: { createdAt: 'desc' }, }); } async function findVehicleById(vehicleId, companyId) { return prisma_1.prisma.vehicle.findFirstOrThrow({ where: { id: vehicleId, companyId, isPublished: true }, }); } async function findActiveOffers(companyId) { return prisma_1.prisma.offer.findMany({ where: { companyId, isActive: true, validFrom: { lte: new Date() }, validUntil: { gte: new Date() } }, orderBy: [{ isFeatured: 'desc' }, { createdAt: 'desc' }], }); } async function findInsurancePolicies(companyId) { return prisma_1.prisma.insurancePolicy.findMany({ where: { companyId, isActive: true }, orderBy: [{ isRequired: 'desc' }, { sortOrder: 'asc' }, { name: 'asc' }], }); } async function findOfferByPromoCode(companyId, code) { return prisma_1.prisma.offer.findFirst({ where: { companyId, promoCode: code, isActive: true, validFrom: { lte: new Date() }, validUntil: { gte: new Date() } }, }); } async function upsertCustomer(companyId, data) { const existing = await prisma_1.prisma.customer.findUnique({ where: { companyId_email: { companyId, email: data.email } }, select: { id: true, address: true }, }); const address = { ...(existing?.address && typeof existing.address === 'object' && !Array.isArray(existing.address) ? existing.address : {}), fullAddress: data.fullAddress, identityDocumentNumber: data.identityDocumentNumber, internationalLicenseNumber: data.internationalLicenseNumber ?? null, }; const payload = { firstName: data.firstName, lastName: data.lastName, email: data.email, phone: data.phone, driverLicense: data.driverLicense, dateOfBirth: new Date(data.dateOfBirth), nationality: data.nationality, address, licenseExpiry: new Date(data.licenseExpiry), licenseIssuedAt: new Date(data.licenseIssuedAt), licenseCountry: data.licenseCountry, licenseNumber: data.licenseNumber ?? data.driverLicense, licenseCategory: data.licenseCategory, }; if (!existing) { return prisma_1.prisma.customer.create({ data: { companyId, ...payload }, }); } return prisma_1.prisma.customer.update({ where: { id: existing.id }, data: payload, }); } async function createReservation(data) { return prisma_1.prisma.reservation.create({ data: data }); } async function findReservationWithDetails(reservationId) { return prisma_1.prisma.reservation.findUniqueOrThrow({ where: { id: reservationId }, include: { insurances: true, additionalDrivers: true }, }); } async function findBooking(reservationId, companyId) { return prisma_1.prisma.reservation.findFirstOrThrow({ where: { id: reservationId, companyId }, include: { vehicle: true, customer: true }, }); } async function findReservationForPayment(reservationId, companyId) { return prisma_1.prisma.reservation.findFirstOrThrow({ where: { id: reservationId, companyId }, include: { vehicle: true, customer: true, additionalDrivers: true }, }); } async function createRentalPayment(data) { return prisma_1.prisma.rentalPayment.create({ data: { ...data, paymentProvider: data.paymentProvider, status: 'PENDING', type: 'CHARGE' }, }); } async function findPaymentByPaypalOrderId(paypalOrderId, companyId) { return prisma_1.prisma.rentalPayment.findFirstOrThrow({ where: { paypalCaptureId: paypalOrderId, companyId } }); } async function capturePaypalPayment(paymentId, captureId, reservationId, amount) { await prisma_1.prisma.rentalPayment.update({ where: { id: paymentId }, data: { status: 'SUCCEEDED', paidAt: new Date(), paypalCaptureId: captureId } }); await prisma_1.prisma.reservation.update({ where: { id: reservationId }, data: { paymentStatus: 'PAID', paidAmount: { increment: amount } } }); } async function createReservationPublicAccess(reservationId, tokenHash, expiresAt) { return prisma_1.prisma.reservationPublicAccess.create({ data: { reservationId, tokenHash, expiresAt }, }); } async function findReservationPublicAccess(reservationId, tokenHash) { return prisma_1.prisma.reservationPublicAccess.findFirst({ where: { reservationId, tokenHash, revokedAt: null, expiresAt: { gt: new Date() } }, }); } async function markReservationPublicAccessUsed(id) { return prisma_1.prisma.reservationPublicAccess.update({ where: { id }, data: { usedAt: new Date() }, }); } //# sourceMappingURL=site.repo.js.map