// prisma/create-test-user.ts import { PrismaClient } from '@prisma/client'; import { hash } from 'bcryptjs'; const prisma = new PrismaClient(); // Location.name ist @unique → upsert per name async function ensureLocation(name: string) { return prisma.location.upsert({ where: { name }, update: {}, create: { name }, }); } async function main() { const email = 'christoph.rother@polizei.nrw.de'; const username = 'admin'; const password = 'tegvideo7010!'; const passwordHash = await hash(password, 10); // User anlegen / aktualisieren const user = await prisma.user.upsert({ where: { email }, update: { username, passwordHash, }, create: { email, username, name: 'Admin', passwordHash, }, }); // Rollen anlegen const [adminRole, inventurRole, readonlyRole] = await Promise.all([ prisma.role.upsert({ where: { name: 'ADMIN' }, update: {}, create: { name: 'ADMIN' }, }), prisma.role.upsert({ where: { name: 'INVENTUR' }, update: {}, create: { name: 'INVENTUR' }, }), prisma.role.upsert({ where: { name: 'READONLY' }, update: {}, create: { name: 'READONLY' }, }), ]); // User-Rolle ADMIN zuweisen await prisma.userRole.upsert({ where: { userId_roleId: { userId: user.id, roleId: adminRole.id, }, }, update: {}, create: { userId: user.id, roleId: adminRole.id, }, }); // Device-Gruppen anlegen const dienstrechnerGroup = await prisma.deviceGroup.upsert({ where: { name: 'Dienstrechner' }, // name ist @unique update: {}, create: { name: 'Dienstrechner' }, }); const monitoreGroup = await prisma.deviceGroup.upsert({ where: { name: 'Monitore' }, update: {}, create: { name: 'Monitore' }, }); // Standorte anlegen (Location.name ist @unique → ensureLocation nutzt upsert) const raum112 = await ensureLocation('Raum 1.12'); const lagerKeller = await ensureLocation('Lager Keller'); // Geräte anlegen / aktualisieren (inventoryNumber ist @id) const device1 = await prisma.device.upsert({ where: { inventoryNumber: '1' }, update: { // falls du bei erneutem Aufruf auch z.B. Hersteller / Model aktualisieren willst, // kannst du die Felder hier noch einmal setzen }, create: { inventoryNumber: '1', name: 'Dienstrechner Sachbearbeitung 1', manufacturer: 'Dell', model: 'OptiPlex 7010', serialNumber: 'SN-ABC-123', productNumber: 'PN-4711', comment: 'Steht am Fensterplatz', ipv4Address: '10.0.0.12', ipv6Address: null, macAddress: '00-11-22-33-44-55', username: 'sachb1', groupId: dienstrechnerGroup.id, locationId: raum112.id, createdById: user.id, updatedById: user.id, // 🔹 Beispiel-Tags für Gerät 1 tags: { connectOrCreate: [ { where: { name: 'Dienstrechner' }, create: { name: 'Dienstrechner' }, }, { where: { name: 'Büro' }, create: { name: 'Büro' }, }, { where: { name: 'Windows' }, create: { name: 'Windows' }, }, ], }, }, }); const device2 = await prisma.device.upsert({ where: { inventoryNumber: '2' }, update: {}, create: { inventoryNumber: '2', name: 'Monitor Lager 27"', manufacturer: 'Samsung', model: 'S27F350', serialNumber: 'SN-DEF-456', productNumber: 'PN-0815', comment: null, ipv4Address: null, ipv6Address: null, macAddress: null, username: null, groupId: monitoreGroup.id, locationId: lagerKeller.id, createdById: user.id, updatedById: user.id, // 🔹 Beispiel-Tags für Gerät 2 tags: { connectOrCreate: [ { where: { name: 'Monitor' }, create: { name: 'Monitor' }, }, { where: { name: 'Lager' }, create: { name: 'Lager' }, }, ], }, }, }); console.log('Test-User und Beispieldaten angelegt/aktualisiert:'); console.log(` Email: ${user.email}`); console.log(` Username: ${user.username}`); console.log(` Passwort: ${password}`); console.log(' Devices: ', device1.inventoryNumber, device2.inventoryNumber); } main() .catch((e) => { console.error(e); process.exit(1); }) .finally(async () => { await prisma.$disconnect(); });