targo-backend/prisma/mock-seeds-scripts/08-leave-requests-archive.ts
2025-08-29 09:57:12 -04:00

80 lines
2.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 quil 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());