/** * Beispieldaten für die Entwicklung. * * npm run db:seed * * Das Skript ist idempotent: mehrfaches Ausführen legt nichts doppelt an. * Es fasst ausschließlich die Demo-Konten und deren Daten an — eine echte * Instanz nimmt dadurch keinen Schaden, sollte es versehentlich laufen. */ import { PrismaPg } from "@prisma/adapter-pg"; import bcrypt from "bcryptjs"; import { PrismaClient } from "../src/generated/prisma/client"; try { process.loadEnvFile(".env"); } catch { // Werte kommen aus der Umgebung. } const prisma = new PrismaClient({ adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }), }); const DEMO_PASSWORD = "flimmer-demo-2026"; async function seedUsers() { const passwordHash = await bcrypt.hash(DEMO_PASSWORD, 12); const admin = await prisma.user.upsert({ where: { email: "demo@flimmer.local" }, update: {}, create: { email: "demo@flimmer.local", name: "Demo Nutzer", passwordHash, role: "ADMIN", region: "DE", publicProfile: true, profileSlug: "demo", }, }); const friend = await prisma.user.upsert({ where: { email: "gast@flimmer.local" }, update: {}, create: { email: "gast@flimmer.local", name: "Gast Nutzerin", passwordHash, role: "USER", region: "DE", }, }); return { admin, friend }; } async function main() { console.log("Seed: lege Demo-Konten an ..."); const { admin, friend } = await seedUsers(); console.log(""); console.log("Fertig. Anmelden mit:"); console.log(` ${admin.email} / ${DEMO_PASSWORD} (Administrator)`); console.log(` ${friend.email} / ${DEMO_PASSWORD}`); } main() .catch((error) => { console.error(error); process.exit(1); }) .finally(async () => { await prisma.$disconnect(); });