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

68 lines
2.7 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.findMany = findMany;
exports.findByIdOrThrow = findByIdOrThrow;
exports.findFirst = findFirst;
exports.create = create;
exports.update = update;
exports.deleteMany = deleteMany;
exports.setActive = setActive;
exports.getStats = getStats;
const prisma_1 = require("../../lib/prisma");
function findMany(companyId, filters) {
const where = { companyId };
if (filters.active !== undefined)
where.isActive = filters.active === 'true';
if (filters.public !== undefined)
where.isPublic = filters.public === 'true';
return prisma_1.prisma.offer.findMany({ where, orderBy: { createdAt: 'desc' } });
}
function findByIdOrThrow(id, companyId) {
return prisma_1.prisma.offer.findFirstOrThrow({ where: { id, companyId }, include: { vehicles: true } });
}
function findFirst(id, companyId) {
return prisma_1.prisma.offer.findFirst({ where: { id, companyId } });
}
async function create(companyId, data, vehicleIds) {
return prisma_1.prisma.offer.create({
data: {
...data,
companyId,
validFrom: new Date(data.validFrom),
validUntil: new Date(data.validUntil),
vehicles: vehicleIds.length > 0 ? { create: vehicleIds.map((id) => ({ vehicleId: id })) } : undefined,
},
include: { vehicles: true },
});
}
async function update(id, data, vehicleIds) {
return prisma_1.prisma.$transaction(async (tx) => {
await tx.offer.update({
where: { id },
data: {
...data,
validFrom: data.validFrom ? new Date(data.validFrom) : undefined,
validUntil: data.validUntil ? new Date(data.validUntil) : undefined,
},
});
if (vehicleIds !== undefined) {
await tx.offerVehicle.deleteMany({ where: { offerId: id } });
if (vehicleIds.length > 0) {
await tx.offerVehicle.createMany({ data: vehicleIds.map((vehicleId) => ({ offerId: id, vehicleId })) });
}
}
return tx.offer.findUniqueOrThrow({ where: { id }, include: { vehicles: true } });
});
}
function deleteMany(id, companyId) {
return prisma_1.prisma.offer.deleteMany({ where: { id, companyId } });
}
function setActive(id, companyId, isActive) {
return prisma_1.prisma.offer.updateMany({ where: { id, companyId }, data: { isActive } });
}
async function getStats(id, companyId) {
const offer = await prisma_1.prisma.offer.findFirstOrThrow({ where: { id, companyId } });
const reservations = await prisma_1.prisma.reservation.count({ where: { offerId: offer.id } });
return { redemptions: offer.redemptionCount, reservations };
}
//# sourceMappingURL=offer.repo.js.map