import { PrismaClient } from "@prisma/client"; import bcrypt from "bcryptjs"; const prisma = new PrismaClient(); async function main() { const existingAdmin = await prisma.user.findFirst({ where: { role: "admin" } }); if (existingAdmin) { console.log(`[seed] admin already exists (${existingAdmin.email ?? existingAdmin.id}); nothing to do`); return; } const email = process.env.BOOTSTRAP_ADMIN_EMAIL; const password = process.env.BOOTSTRAP_ADMIN_PASSWORD; const name = process.env.BOOTSTRAP_ADMIN_NAME ?? "Administrator"; if (!email || !password) { console.warn( "[seed] BOOTSTRAP_ADMIN_EMAIL/PASSWORD not set — no admin created. Set them and rerun.", ); return; } const passwordHash = await bcrypt.hash(password, 12); const user = await prisma.user.create({ data: { role: "admin", name, email, passwordHash, active: true, }, }); console.log(`[seed] created bootstrap admin ${user.email} (id=${user.id})`); console.log("[seed] IMPORTANT: change this password after first login."); } main() .catch((err) => { console.error("[seed] failed:", err); process.exitCode = 1; }) .finally(async () => { await prisma.$disconnect(); });