import { PrismaClient, Role } from '@prisma/client'; import bcrypt from 'bcryptjs'; const prisma = new PrismaClient(); const BCRYPT_ROUNDS = 12; const BETA_USERS: { email: string; name: string; nameRu: string; role: Role; password: string }[] = [ { email: 'admin@metallcart.ru', name: 'Louis-André Gruart', nameRu: 'Луи-Андре Грюар', role: 'ADMIN', password: 'MetallKart_admin_2026!' }, { email: 'direction-ops@metallcart.ru', name: 'Maksim (DIRECTION_OPS)',nameRu: 'Максим (DIRECTION_OPS)', role: 'DIRECTION_OPS', password: 'MetallKart_dirops_2026!' }, { email: 'production@metallcart.ru', name: 'Darya (ADM_PRODUCTION)',nameRu: 'Дарья (ADM_PRODUCTION)', role: 'ADM_PRODUCTION', password: 'MetallKart_prod_2026!' }, { email: 'achat@metallcart.ru', name: 'Evgeny (ACHETEUR)', nameRu: 'Евгений (ACHETEUR)', role: 'ACHETEUR', password: 'MetallKart_achat_2026!' }, { email: 'commercial@metallcart.ru', name: 'Manager (COMMERCIAL)', nameRu: 'Менеджер коммерции', role: 'COMMERCIAL', password: 'MetallKart_com_2026!' }, { email: 'direction-fin@metallcart.ru', name: 'FIN Director', nameRu: 'Финансовый директор', role: 'DIRECTION_FIN', password: 'MetallKart_dirfin_2026!' }, // ADM_GENERAL does not exist in Role enum — mapped to USER (closest generic role) { email: 'admin-general@metallcart.ru', name: 'General Admin', nameRu: 'Общая администрация', role: 'USER', password: 'MetallKart_admgen_2026!' }, ]; async function main() { console.log('=== SEED BETA USERS ==='); const validRoles = Object.values(Role); let created = 0; let skipped = 0; for (const u of BETA_USERS) { if (!validRoles.includes(u.role)) { console.warn(` SKIP ${u.email} — role "${u.role}" does not exist in Role enum`); skipped++; continue; } const existing = await prisma.user.findUnique({ where: { email: u.email } }); if (existing) { console.log(` EXISTS ${u.email} (role=${existing.role}) — password NOT overwritten`); skipped++; continue; } const hash = bcrypt.hashSync(u.password, BCRYPT_ROUNDS); await prisma.user.create({ data: { email: u.email, password: hash, name: u.name, nameRu: u.nameRu, role: u.role, active: true, }, }); console.log(` CREATED ${u.email} (role=${u.role})`); created++; } console.log(`\nDone: ${created} created, ${skipped} skipped`); const total = await prisma.user.count({ where: { email: { endsWith: '@metallcart.ru' } } }); console.log(`Total @metallcart.ru users in DB: ${total}`); if (total > 30) { console.error('WARNING: More than 30 @metallcart.ru users — verify this is expected'); } } main() .catch(e => { console.error(e); process.exit(1); }) .finally(() => prisma.$disconnect());