146 lines
3.6 KiB
TypeScript
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();
|
|
});
|