"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