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

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