import { PrismaClient, LeaveApprovalStatus, LeaveRequests } from '@prisma/client'; if (process.env.SKIP_LEAVE_REQUESTS === 'true') { console.log("⏭ Seed leave-requests ignoré (SKIP_LEAVE_REQUESTS=true)"); process.exit(0); } const prisma = new PrismaClient(); function daysAgo(n: number) { const d = new Date(); d.setUTCDate(d.getUTCDate() - n); d.setUTCHours(0, 0, 0, 0); return d; } async function main() { // 1) Récupère tous les employés const employees = await prisma.employees.findMany({ select: { id: true } }); if (!employees.length) { throw new Error('Aucun employé trouvé. Exécute le seed employees avant celui-ci.'); } // 2) Va chercher les bank codes dont le type est SICK, VACATION ou HOLIDAY const leaveCodes = await prisma.bankCodes.findMany({ where: { type: { in: ['SICK', 'VACATION'] } }, select: { id: true, type: true, bank_code: true }, }); if (!leaveCodes.length) { throw new Error("Aucun bank code trouvé avec type in ('SICK','VACATION','HOLIDAY'). Vérifie ta table bank_codes."); } const statuses = Object.values(LeaveApprovalStatus); const created: LeaveRequests[] = []; // 3) Crée quelques leave requests const COUNT = 12; for (let i = 0; i < COUNT; i++) { const emp = employees[i % employees.length]; const leaveCode = leaveCodes[Math.floor(Math.random() * leaveCodes.length)]; const start = daysAgo(120 - i * 3); const end = Math.random() < 0.6 ? daysAgo(119 - i * 3) : null; const lr = await prisma.leaveRequests.create({ data: { employee_id: emp.id, bank_code_id: leaveCode.id, // on stocke le "type" tel qu’il est défini dans bank_codes leave_type: leaveCode.type as any, start_date_time: start, end_date_time: end, comment: `Past leave #${i + 1} (${leaveCode.type})`, approval_status: statuses[(i + 2) % statuses.length], }, }); created.push(lr); } // 4) Archive for (const lr of created) { await prisma.leaveRequestsArchive.create({ data: { leave_request_id: lr.id, employee_id: lr.employee_id, leave_type: lr.leave_type, start_date_time: lr.start_date_time, end_date_time: lr.end_date_time, comment: lr.comment, approval_status: lr.approval_status, }, }); } console.log(`✓ LeaveRequestsArchive: ${created.length} rows`); } main().finally(() => prisma.$disconnect());