142 lines
6.0 KiB
JavaScript
142 lines
6.0 KiB
JavaScript
"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
|