Files
Atlas/prisma/seed.ts
Julia Wehden a2c95c70e7 feat: Equipment-System, Buchungsbearbeitung, Kundenadresse, LexOffice-Fix
- Vintage Modell hinzugefuegt
- Equipment Multi-Select (Neue Buchung + Bearbeitung)
- Kundenadresse in Formularen
- Bearbeiten-Seite fuer Buchungen
- Abbau-Zeiten in Formularen und Uebersicht
- Vertrag PDF nur bei Privatkunden
- LexOffice Kontakt-Erstellung Fix (BUSINESS)
- Zurueck-Pfeil auf Touren-Seite
2026-03-19 16:21:55 +01:00

195 lines
7.9 KiB
TypeScript

import { PrismaClient } from '@prisma/client';
import { hash } from 'bcryptjs';
const prisma = new PrismaClient();
async function main() {
console.log('Seeding database...');
const adminPassword = await hash('admin123', 12);
const driverPassword = await hash('driver123', 12);
const admin = await prisma.user.upsert({
where: { email: 'admin@savethemoment.de' },
update: {},
create: {
email: 'admin@savethemoment.de',
name: 'Dennis Forte',
password: adminPassword,
role: 'ADMIN',
phoneNumber: '+49 123 456789',
},
});
const driver1 = await prisma.user.upsert({
where: { email: 'fahrer1@savethemoment.de' },
update: {},
create: {
email: 'fahrer1@savethemoment.de',
name: 'Max Mustermann',
password: driverPassword,
role: 'DRIVER',
phoneNumber: '+49 123 456780',
},
});
const driver2 = await prisma.user.upsert({
where: { email: 'fahrer2@savethemoment.de' },
update: {},
create: {
email: 'fahrer2@savethemoment.de',
name: 'Anna Schmidt',
password: driverPassword,
role: 'DRIVER',
phoneNumber: '+49 123 456781',
},
});
const luebeck = await prisma.location.upsert({
where: { slug: 'luebeck' },
update: {},
create: {
name: 'Lübeck',
city: 'Lübeck',
slug: 'luebeck',
websiteUrl: 'https://fotobox-luebeck.de',
contactEmail: 'info@fotobox-luebeck.de',
warehouseAddress: 'Wahmstraße 83',
warehouseZip: '23552',
warehouseCity: 'Lübeck',
},
});
const hamburg = await prisma.location.upsert({
where: { slug: 'hamburg' },
update: {},
create: {
name: 'Hamburg',
city: 'Hamburg',
slug: 'hamburg',
websiteUrl: 'https://hamburg-fotobox.de',
contactEmail: 'info@hamburg-fotobox.de',
warehouseAddress: 'Wahmstraße 83',
warehouseZip: '23552',
warehouseCity: 'Lübeck',
},
});
const kiel = await prisma.location.upsert({
where: { slug: 'kiel' },
update: {},
create: {
name: 'Kiel',
city: 'Kiel',
slug: 'kiel',
websiteUrl: 'https://fotobox-kiel.de',
contactEmail: 'info@fotobox-kiel.de',
warehouseAddress: 'Wahmstraße 83',
warehouseZip: '23552',
warehouseCity: 'Lübeck',
},
});
const berlin = await prisma.location.upsert({
where: { slug: 'berlin' },
update: {},
create: {
name: 'Berlin',
city: 'Berlin',
slug: 'berlin',
websiteUrl: 'https://fotobox-potsdam.de',
contactEmail: 'info@fotobox-potsdam.de',
warehouseAddress: 'Wahmstraße 83',
warehouseZip: '23552',
warehouseCity: 'Lübeck',
},
});
const rostock = await prisma.location.upsert({
where: { slug: 'rostock' },
update: {},
create: {
name: 'Rostock',
city: 'Rostock',
slug: 'rostock',
websiteUrl: 'https://fotobox-rostock.de',
contactEmail: 'info@fotobox-rostock.de',
warehouseAddress: 'Wahmstraße 83',
warehouseZip: '23552',
warehouseCity: 'Lübeck',
},
});
await prisma.priceConfig.createMany({
data: [
{ locationId: luebeck.id, model: 'VINTAGE_SMILE', basePrice: 399, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: luebeck.id, model: 'VINTAGE_PHOTOS', basePrice: 449, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: luebeck.id, model: 'NOSTALGIE', basePrice: 499, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: luebeck.id, model: 'MAGIC_MIRROR', basePrice: 599, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: hamburg.id, model: 'VINTAGE_SMILE', basePrice: 419, kmFlatRate: 100, kmFlatRateUpTo: 60, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: hamburg.id, model: 'VINTAGE_PHOTOS', basePrice: 469, kmFlatRate: 100, kmFlatRateUpTo: 60, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: hamburg.id, model: 'NOSTALGIE', basePrice: 519, kmFlatRate: 100, kmFlatRateUpTo: 60, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: hamburg.id, model: 'MAGIC_MIRROR', basePrice: 619, kmFlatRate: 100, kmFlatRateUpTo: 60, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: kiel.id, model: 'VINTAGE_SMILE', basePrice: 389, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: kiel.id, model: 'VINTAGE_PHOTOS', basePrice: 439, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: kiel.id, model: 'NOSTALGIE', basePrice: 489, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: kiel.id, model: 'MAGIC_MIRROR', basePrice: 589, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: berlin.id, model: 'VINTAGE_SMILE', basePrice: 409, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: berlin.id, model: 'VINTAGE_PHOTOS', basePrice: 459, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: berlin.id, model: 'NOSTALGIE', basePrice: 509, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: berlin.id, model: 'MAGIC_MIRROR', basePrice: 609, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: rostock.id, model: 'VINTAGE_SMILE', basePrice: 379, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: rostock.id, model: 'VINTAGE_PHOTOS', basePrice: 429, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: rostock.id, model: 'NOSTALGIE', basePrice: 479, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
{ locationId: rostock.id, model: 'MAGIC_MIRROR', basePrice: 579, kmFlatRate: 60, kmFlatRateUpTo: 15, pricePerKm: 0.40, kmMultiplier: 4 },
],
skipDuplicates: true,
});
await prisma.photobox.createMany({
data: [
{ locationId: luebeck.id, model: 'VINTAGE_SMILE', serialNumber: 'LUE-VS-001' },
{ locationId: luebeck.id, model: 'VINTAGE_SMILE', serialNumber: 'LUE-VS-002' },
{ locationId: luebeck.id, model: 'VINTAGE_PHOTOS', serialNumber: 'LUE-VP-001' },
{ locationId: luebeck.id, model: 'NOSTALGIE', serialNumber: 'LUE-NOS-001' },
{ locationId: luebeck.id, model: 'MAGIC_MIRROR', serialNumber: 'LUE-MM-001' },
{ locationId: hamburg.id, model: 'VINTAGE_SMILE', serialNumber: 'HAM-VS-001' },
{ locationId: hamburg.id, model: 'VINTAGE_SMILE', serialNumber: 'HAM-VS-002' },
{ locationId: hamburg.id, model: 'VINTAGE_PHOTOS', serialNumber: 'HAM-VP-001' },
{ locationId: hamburg.id, model: 'NOSTALGIE', serialNumber: 'HAM-NOS-001' },
{ locationId: hamburg.id, model: 'MAGIC_MIRROR', serialNumber: 'HAM-MM-001' },
{ locationId: kiel.id, model: 'VINTAGE_SMILE', serialNumber: 'KIEL-VS-001' },
{ locationId: kiel.id, model: 'VINTAGE_PHOTOS', serialNumber: 'KIEL-VP-001' },
{ locationId: kiel.id, model: 'NOSTALGIE', serialNumber: 'KIEL-NOS-001' },
{ locationId: berlin.id, model: 'VINTAGE_SMILE', serialNumber: 'BER-VS-001' },
{ locationId: berlin.id, model: 'MAGIC_MIRROR', serialNumber: 'BER-MM-001' },
{ locationId: rostock.id, model: 'VINTAGE_SMILE', serialNumber: 'ROS-VS-001' },
{ locationId: rostock.id, model: 'NOSTALGIE', serialNumber: 'ROS-NOS-001' },
],
skipDuplicates: true,
});
console.log('Database seeded successfully!');
console.log('\nTest Accounts:');
console.log('Admin: admin@savethemoment.de / admin123');
console.log('Fahrer 1: fahrer1@savethemoment.de / driver123');
console.log('Fahrer 2: fahrer2@savethemoment.de / driver123');
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});