targo-backend/prisma/mock-seeds-scripts/02-users.ts

72 lines
1.9 KiB
TypeScript

import { PrismaClient, Roles } from '@prisma/client';
const prisma = new PrismaClient();
const BASE_PHONE = 1_100_000_000; // < 2_147_483_647
function emailFor(i: number) {
return `user${i + 1}@example.test`;
}
async function main() {
// 50 users total: 40 employees + 10 customers
// Roles distribution for the 40 employees:
// 1 ADMIN, 4 SUPERVISOR, 1 HR, 1 ACCOUNTING, 33 EMPLOYEE
// 10 CUSTOMER (non-employees)
const usersData: {
first_name: string;
last_name: string;
email: string;
phone_number: number;
residence?: string | null;
role: Roles;
}[] = [];
const firstNames = ['Alex','Sam','Chris','Jordan','Taylor','Morgan','Jamie','Robin','Avery','Casey'];
const lastNames = ['Smith','Johnson','Williams','Brown','Jones','Miller','Davis','Wilson','Taylor','Clark'];
// helper to pick
const pick = <T>(arr: T[]) => arr[Math.floor(Math.random() * arr.length)];
const rolesForEmployees: Roles[] = [
Roles.ADMIN,
...Array(4).fill(Roles.SUPERVISOR),
Roles.HR,
Roles.ACCOUNTING,
...Array(33).fill(Roles.EMPLOYEE),
];
// 40 employees
for (let i = 0; i < 40; i++) {
const fn = pick(firstNames);
const ln = pick(lastNames);
usersData.push({
first_name: fn,
last_name: ln,
email: emailFor(i),
phone_number: BASE_PHONE + i,
residence: Math.random() < 0.5 ? 'QC' : 'ON',
role: rolesForEmployees[i],
});
}
// 10 customers
for (let i = 40; i < 50; i++) {
const fn = pick(firstNames);
const ln = pick(lastNames);
usersData.push({
first_name: fn,
last_name: ln,
email: emailFor(i),
phone_number: BASE_PHONE + i,
residence: Math.random() < 0.5 ? 'QC' : 'ON',
role: Roles.CUSTOMER,
});
}
await prisma.users.createMany({ data: usersData, skipDuplicates: true });
console.log('✓ Users: 50 rows (40 employees, 10 customers)');
}
main().finally(() => prisma.$disconnect());