diff --git a/package.json b/package.json index 0c07ce8..0c58f5f 100755 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "db:migrate": "prisma migrate dev", "db:reset": "prisma migrate reset", "db:seed": "bun prisma/seed.ts", + "db:seed-demo": "bun prisma/seed-demo.ts", "test": "playwright test --config playwright-dyad.config.ts" }, "dependencies": { diff --git a/prisma/seed-demo.ts b/prisma/seed-demo.ts new file mode 100644 index 0000000..9ad2092 --- /dev/null +++ b/prisma/seed-demo.ts @@ -0,0 +1,41 @@ +import { PrismaClient } from '@prisma/client' +import bcrypt from 'bcryptjs' + +const prisma = new PrismaClient() +const password = 'Demo2025!' + +const demoUsers = [ + { email: 'demo@competencetrack.org', firstName: 'Anna', lastName: 'Müller', role: 'SCHOOL_ADMIN' }, + { email: 'demo.vice@competencetrack.org', firstName: 'Clara', lastName: 'Schmidt', role: 'VICE_PRINCIPAL' }, + { email: 'demo.teacher@competencetrack.org', firstName: 'Max', lastName: 'Lehrer', role: 'TEACHER' }, + { email: 'demo.student@competencetrack.org', firstName: 'Lena', lastName: 'Schüler', role: 'STUDENT' }, + { email: 'demo.parent@competencetrack.org', firstName: 'Thomas', lastName: 'Elter', role: 'PARENT' }, +] + +async function main() { + const passwordHash = await bcrypt.hash(password, 10) + + for (const user of demoUsers) { + await prisma.user.upsert({ + where: { email: user.email }, + update: { isDemo: true, passwordHash }, + create: { ...user, passwordHash, locale: 'de', isDemo: true }, + }) + } + + const seededCount = await prisma.user.count({ + where: { email: { in: demoUsers.map(({ email }) => email) }, isDemo: true }, + }) + if (seededCount !== demoUsers.length) throw new Error(`Expected ${demoUsers.length} demo accounts, found ${seededCount}`) + + console.log(`Ensured ${seededCount} demo accounts.`) +} + +main() + .catch((error) => { + console.error(error) + process.exit(1) + }) + .finally(async () => { + await prisma.$disconnect() + })