geraete/prisma/create-test-user.ts
2025-11-14 20:16:24 +01:00

146 lines
3.6 KiB
TypeScript

// prisma/create-test-user.ts
import { PrismaClient } from '@prisma/client';
import { hash } from 'bcryptjs';
const prisma = new PrismaClient();
async function ensureLocation(name: string) {
const existing = await prisma.location.findFirst({ where: { name } });
if (existing) return existing;
return prisma.location.create({ data: { 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: 'Test User',
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 NICHT unique, daher findFirst + create)
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: {},
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,
},
});
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,
},
});
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();
});