import 'dotenv/config'; import * as bcrypt from 'bcryptjs'; import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaClient } from '../generated/prisma'; const BCRYPT_SALT_ROUNDS = 12; const DEFAULT_ADMIN_EMAIL = 'admin@apicore.local'; const DEFAULT_ADMIN_PASSWORD = 'ChangeMe123!'; async function main(): Promise { const prisma = new PrismaClient({ adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }), }); const email = process.env.SEED_ADMIN_EMAIL ?? DEFAULT_ADMIN_EMAIL; const password = process.env.SEED_ADMIN_PASSWORD ?? DEFAULT_ADMIN_PASSWORD; const existing = await prisma.user.findUnique({ where: { email } }); if (existing) { console.log(`Seed: admin user ${email} already exists, skipping.`); await prisma.$disconnect(); return; } const passwordHash = await bcrypt.hash(password, BCRYPT_SALT_ROUNDS); const adminRole = await prisma.role.findUniqueOrThrow({ where: { key: 'ADMIN' }, }); await prisma.user.create({ data: { email, passwordHash, name: 'Administrator', legacyRole: 'ADMIN', roleId: adminRole.id, }, }); console.log(`Seed: created admin user ${email}.`); await prisma.$disconnect(); } main().catch((error: unknown) => { console.error(error); process.exit(1); });