const prisma = require("../config/prisma"); const { expireOverdueClaims } = require("../utils/gameWindow"); const getGainByTicketCode = async (req, res) => { try { const { code } = req.params; await expireOverdueClaims(); const ticket = await prisma.ticket.findUnique({ where: { code: code.toUpperCase() }, include: { lot: true, user: { select: { id: true, firstname: true, lastname: true, email: true, }, }, participation: { include: { claim: true, }, }, }, }); if (!ticket) { return res.status(404).json({ message: "Ticket introuvable.", }); } if (!ticket.isUsed || !ticket.participation) { return res.status(400).json({ message: "Ce ticket n'a pas encore été utilisé par un client.", }); } return res.json({ ticket: { code: ticket.code, usedAt: ticket.usedAt, }, client: ticket.user, lot: { name: ticket.lot.name, description: ticket.lot.description, value: ticket.lot.value, }, claim: { id: ticket.participation.claim.id, status: ticket.participation.claim.status, claimedAt: ticket.participation.claim.claimedAt, }, }); } catch (error) { console.error("Erreur recherche gain employé:", error); return res.status(500).json({ message: "Erreur serveur lors de la recherche du gain.", }); } }; const deliverClaim = async (req, res) => { try { const { id } = req.params; const employeeId = req.user.id; await expireOverdueClaims(); const claim = await prisma.claim.findUnique({ where: { id: Number(id) }, }); if (!claim) { return res.status(404).json({ message: "Réclamation introuvable.", }); } if (claim.status === "DELIVERED") { return res.status(409).json({ message: "Ce lot a déjà été remis.", }); } if (claim.status === "CANCELLED") { return res.status(400).json({ message: "Ce gain est expiré et ne peut plus être remis.", }); } const updatedClaim = await prisma.claim.update({ where: { id: Number(id) }, data: { status: "DELIVERED", claimedAt: new Date(), validatedByEmployeeId: employeeId, }, }); return res.json({ message: "Lot marqué comme remis avec succès.", claim: updatedClaim, }); } catch (error) { console.error("Erreur remise lot:", error); return res.status(500).json({ message: "Erreur serveur lors de la remise du lot.", }); } }; module.exports = { getGainByTicketCode, deliverClaim, };