import { PrismaClient, Roles } from '@prisma/client'; const prisma = new PrismaClient(); function randInt(min: number, max: number) { return Math.floor(Math.random() * (max - min + 1)) + min; } function randomPastDate(yearsBack = 3) { const now = new Date(); const past = new Date(now); past.setFullYear(now.getFullYear() - yearsBack); const t = randInt(past.getTime(), now.getTime()); const d = new Date(t); d.setHours(0, 0, 0, 0); return d; } const jobTitles = [ 'Directeur des ventes', 'Directeur technique', 'Programmeur', 'Technicien', 'Comptable', 'Magasinier', 'Responsable Resources Humaines', 'Conseiller en vente', 'Support technique', ]; function randomTitle() { return jobTitles[randInt(0, jobTitles.length - 1)]; } // Sélection aléatoire entre 271583 et 271585 function randomCompanyCode() { return Math.random() < 0.5 ? 271583 : 271585; } async function main() { const employeeUsers = await prisma.users.findMany({ where: { role: { in: [Roles.ADMIN, Roles.SUPERVISOR, Roles.HR, Roles.ACCOUNTING, Roles.EMPLOYEE] } }, orderBy: { email: 'asc' }, }); // 1) Trouver le user qui sera le superviseur fixe const supervisorUser = await prisma.users.findUnique({ where: { email: 'user5@example.test' }, }); if (!supervisorUser) { throw new Error("Le user 'user5@example.test' n'existe pas !"); } // 2) Créer ou récupérer son employee avec is_supervisor = true const supervisorEmp = await prisma.employees.upsert({ where: { user_id: supervisorUser.id }, update: { is_supervisor: true }, create: { user_id: supervisorUser.id, external_payroll_id: randInt(10000, 99999), company_code: randomCompanyCode(), first_work_day: randomPastDate(3), last_work_day: null, job_title: randomTitle(), is_supervisor: true, }, }); // 3) Créer tous les autres employés avec ce superviseur (sauf ADMIN qui n’a pas de superviseur) for (const u of employeeUsers) { const already = await prisma.employees.findUnique({ where: { user_id: u.id } }); if (already) continue; const supervisor_id = u.role === Roles.ADMIN ? null : supervisorEmp.id; await prisma.employees.create({ data: { user_id: u.id, external_payroll_id: randInt(10000, 99999), company_code: randomCompanyCode(), first_work_day: randomPastDate(3), last_work_day: null, supervisor_id, job_title: randomTitle(), }, }); } const total = await prisma.employees.count(); console.log(`✓ Employees: ${total} rows (supervisor = ${supervisorUser.email})`); } main().finally(() => prisma.$disconnect());