import { PrismaClient } from "@/generated/prisma/client"; import { PrismaPg } from "@prisma/adapter-pg"; import { hashPassword } from "better-auth/crypto"; const connectionString = `${process.env.DATABASE_URL}` const adapter = new PrismaPg({ connectionString }) const prisma = new PrismaClient({ adapter }) function uid() { return crypto.randomUUID(); } async function main() { const email = "admin@gaertan.art"; const name = "Admin"; const password = "037Ikk7qmCamW5iYBimcwiPXNELzktIRG9ndiIkA3u"; const passwordHash = await hashPassword(password); // 1) Ensure user exists (your User.id has no default, so we must set it) const user = await prisma.user.upsert({ where: { email }, update: { name, // optional: mark verified for initial admin emailVerified: true, }, create: { id: uid(), email, name, emailVerified: true, }, }); // 2) Ensure credential account exists for this user // Better Auth expects providerId="credential" and accountId=userId for credential accounts. :contentReference[oaicite:2]{index=2} const existingCredential = await prisma.account.findFirst({ where: { userId: user.id, providerId: "credential", accountId: user.id, }, }); if (!existingCredential) { await prisma.account.create({ data: { id: uid(), userId: user.id, providerId: "credential", accountId: user.id, password: passwordHash, }, }); } else { // If it exists, keep it consistent (optionally reset password on seed) await prisma.account.update({ where: { id: existingCredential.id }, data: { password: passwordHash }, }); } console.log("Seeded/updated admin user:"); console.log(" email:", email); console.log(" password:", password); } main() .catch((err) => { console.error("Seed failed:", err); process.exit(1); }) .finally(async () => { await prisma.$disconnect(); });