import { PrismaClient } from '@prisma/client' import bcrypt from 'bcryptjs' const prisma = new PrismaClient() const DEMO_PASSWORD_HASH = bcrypt.hashSync('demo1234', 10) async function main() { console.log('Seeding database...') // Create demo organization const org = await prisma.organization.upsert({ where: { slug: 'innung-elektro-stuttgart' }, update: {}, create: { name: 'Innung Elektrotechnik Stuttgart', slug: 'innung-elektro-stuttgart', plan: 'pilot', primaryColor: '#E63946', contactEmail: 'kontakt@innung-elektro-stuttgart.de', }, }) console.log(`Created organization: ${org.name}`) // Create demo admin user (better-auth manages sessions, we just pre-create the role) // In production: use the invite flow via the admin dashboard const adminUser = await prisma.user.upsert({ where: { email: 'admin@demo.de' }, update: {}, create: { id: 'demo-admin-user-id', name: 'Demo Admin', email: 'admin@demo.de', emailVerified: true, }, }) // Create password account so email+password login works in dev await prisma.account.upsert({ where: { id: 'demo-admin-account-id' }, update: { password: DEMO_PASSWORD_HASH }, create: { id: 'demo-admin-account-id', accountId: adminUser.id, providerId: 'credential', userId: adminUser.id, password: DEMO_PASSWORD_HASH, }, }) await prisma.userRole.upsert({ where: { orgId_userId: { orgId: org.id, userId: adminUser.id } }, update: {}, create: { orgId: org.id, userId: adminUser.id, role: 'admin', }, }) // Create demo admin member record const adminMember = await prisma.member.upsert({ where: { userId: adminUser.id }, update: {}, create: { orgId: org.id, userId: adminUser.id, name: 'Demo Admin', betrieb: 'Innungsgeschäftsstelle', sparte: 'Elektrotechnik', ort: 'Stuttgart', email: 'admin@demo.de', status: 'aktiv', }, }) // Create demo members const demoMembers = [ { name: 'Klaus Müller', betrieb: 'Elektro Müller GmbH', sparte: 'Elektrotechnik', ort: 'Stuttgart', telefon: '+49 711 123456', email: 'mueller@elektro-mueller.de', istAusbildungsbetrieb: true, seit: 2015, }, { name: 'Maria Schmidt', betrieb: 'Schmidt Elektrik', sparte: 'Elektrotechnik', ort: 'Ludwigsburg', telefon: '+49 7141 987654', email: 'schmidt@schmidt-elektrik.de', istAusbildungsbetrieb: false, seit: 2018, }, { name: 'Thomas Weber', betrieb: 'Weber & Söhne Elektro', sparte: 'Informationstechnik', ort: 'Esslingen', telefon: '+49 711 555123', email: 'weber@weber-elektro.de', istAusbildungsbetrieb: true, seit: 2012, }, ] const createdMembers = [] for (const m of demoMembers) { const member = await prisma.member.create({ data: { orgId: org.id, status: 'aktiv', ...m }, }) createdMembers.push(member) } console.log(`Created ${createdMembers.length} demo members`) // Create demo news const news1 = await prisma.news.create({ data: { orgId: org.id, authorId: adminMember.id, title: 'Wichtige Änderungen bei der Gesellenprüfung 2025', body: `## Änderungen ab Herbst 2025 Die Prüfungsordnung wurde angepasst. Folgende Änderungen sind zu beachten: - **Prüfungsteil A** (Gesellenstück) wird auf 2 Tage ausgeweitet - Neue digitale Komponenten in Prüfungsteil B - Anmeldeschluss ist der **15. September 2025** Weitere Details entnehmen Sie dem beigefügten Rundschreiben.`, kategorie: 'Pruefung', publishedAt: new Date(), }, }) await prisma.news.create({ data: { orgId: org.id, authorId: adminMember.id, title: 'Förderung für Ausbildungsbetriebe: Jetzt beantragen!', body: `## Neue Fördergelder verfügbar Das Land Baden-Württemberg stellt für das Jahr 2025 zusätzliche Fördermittel für Ausbildungsbetriebe bereit. **Förderhöhe:** Bis zu 3.000 € pro Auszubildenden **Voraussetzungen:** - Mitglied in einer anerkannten Innung - Erstauszubildende oder benachteiligte Jugendliche Anträge bis **31. März 2025** einreichen.`, kategorie: 'Foerderung', publishedAt: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000), }, }) console.log('Created demo news articles') // Create demo Termin await prisma.termin.create({ data: { orgId: org.id, titel: 'Herbst-Gesellenprüfung 2025', datum: new Date('2025-11-15'), uhrzeit: '08:00', endeDatum: new Date('2025-11-16'), endeUhrzeit: '17:00', ort: 'Berufsschule Stuttgart-Mitte', adresse: 'Neckarstraße 22, 70190 Stuttgart', typ: 'Pruefung', beschreibung: 'Praktische und theoretische Gesellenprüfung für Elektrotechniker.', maxTeilnehmer: 30, }, }) await prisma.termin.create({ data: { orgId: org.id, titel: 'Innungsversammlung Winter 2025', datum: new Date('2025-12-03'), uhrzeit: '19:00', endeUhrzeit: '21:00', ort: 'Gasthof Zum Lamm', adresse: 'Marktplatz 5, 70173 Stuttgart', typ: 'Versammlung', beschreibung: 'Jährliche Winterversammlung mit Jahresrückblick und Vorstandswahlen.', }, }) console.log('Created demo Termine') // Create demo Stelle await prisma.stelle.create({ data: { orgId: org.id, memberId: createdMembers[0].id, sparte: 'Elektrotechnik', stellenAnz: 2, verguetung: '620-750 € / Monat', lehrjahr: 'beliebig', beschreibung: 'Wir suchen motivierte Auszubildende für unser erfolgreiches Elektroinstallationsunternehmen. Moderner Fuhrpark, faire Vergütung, Übernahmechancen.', kontaktEmail: 'mueller@elektro-mueller.de', kontaktName: 'Klaus Müller', aktiv: true, }, }) console.log('Created demo Stelle') console.log('Seeding complete!') } main() .catch((e) => { console.error(e) process.exit(1) }) .finally(async () => { await prisma.$disconnect() })