fix(seed/docker): repair production symbol loss incident
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 21m31s

This commit is contained in:
Pepe Ziberi
2026-05-20 16:56:22 +02:00
parent a53f77c97c
commit ecc9003a73
122 changed files with 5913 additions and 26 deletions

View File

@@ -1,4 +1,4 @@
import { PrismaClient, Role } from '@prisma/client'
import { PrismaClient } from '@prisma/client'
import bcrypt from 'bcryptjs'
const prisma = new PrismaClient()
@@ -18,7 +18,7 @@ async function main() {
email: 'admin@lageplan.local',
name: 'Administrator',
password: adminPassword,
role: Role.ADMIN,
role: 'SERVER_ADMIN',
},
})
@@ -29,7 +29,7 @@ async function main() {
email: 'editor@lageplan.local',
name: 'Einsatzleiter',
password: editorPassword,
role: Role.EDITOR,
role: 'TENANT_ADMIN',
},
})
@@ -40,28 +40,28 @@ async function main() {
email: 'viewer@lageplan.local',
name: 'Beobachter',
password: viewerPassword,
role: Role.VIEWER,
role: 'OPERATOR',
},
})
console.log('✅ Users created:', { admin: admin.email, editor: editor.email, viewer: viewer.email })
// Create icon categories
// Create icon categories with stable IDs (same logic as seed.js)
const categories = [
{ name: 'Feuer', description: 'Brand- und Feuersymbole', sortOrder: 1 },
{ name: 'Wasser', description: 'Wasser- und Überflutungssymbole', sortOrder: 2 },
{ name: 'Gefahrstoffe', description: 'Chemie- und Gefahrstoffsymbole', sortOrder: 3 },
{ name: 'Verkehr', description: 'Verkehrs- und Unfallsymbole', sortOrder: 4 },
{ name: 'Personen', description: 'Personen- und Rettungssymbole', sortOrder: 5 },
{ name: 'Fahrzeuge', description: 'Einsatzfahrzeuge und Geräte', sortOrder: 6 },
{ name: 'Infrastruktur', description: 'Gebäude und Infrastruktursymbole', sortOrder: 7 },
{ name: 'Taktik', description: 'Taktische Zeichen und Symbole', sortOrder: 8 },
{ name: 'Eigene', description: 'Benutzerdefinierte Symbole', sortOrder: 99 },
{ id: 'feuer', name: 'Feuer', description: 'Brand- und Feuersymbole', sortOrder: 1 },
{ id: 'wasser', name: 'Wasser', description: 'Wasser- und Überflutungssymbole', sortOrder: 2 },
{ id: 'gefahrstoffe', name: 'Gefahrstoffe', description: 'Chemie- und Gefahrstoffsymbole', sortOrder: 3 },
{ id: 'verkehr', name: 'Verkehr', description: 'Verkehrs- und Unfallsymbole', sortOrder: 4 },
{ id: 'personen', name: 'Personen', description: 'Personen- und Rettungssymbole', sortOrder: 5 },
{ id: 'fahrzeuge', name: 'Fahrzeuge', description: 'Einsatzfahrzeuge und Geräte', sortOrder: 6 },
{ id: 'infrastruktur', name: 'Infrastruktur', description: 'Gebäude und Infrastruktursymbole', sortOrder: 7 },
{ id: 'taktik', name: 'Taktik', description: 'Taktische Zeichen und Symbole', sortOrder: 8 },
{ id: 'eigene', name: 'Eigene', description: 'Benutzerdefinierte Symbole', sortOrder: 99 },
]
for (const cat of categories) {
await prisma.iconCategory.upsert({
where: { name: cat.name },
where: { id: cat.id },
update: { description: cat.description, sortOrder: cat.sortOrder },
create: cat,
})
@@ -70,14 +70,14 @@ async function main() {
console.log('✅ Icon categories created:', categories.length)
// Get category IDs for system icons
const feuerCat = await prisma.iconCategory.findUnique({ where: { name: 'Feuer' } })
const wasserCat = await prisma.iconCategory.findUnique({ where: { name: 'Wasser' } })
const gefahrstoffeCat = await prisma.iconCategory.findUnique({ where: { name: 'Gefahrstoffe' } })
const verkehrCat = await prisma.iconCategory.findUnique({ where: { name: 'Verkehr' } })
const personenCat = await prisma.iconCategory.findUnique({ where: { name: 'Personen' } })
const fahrzeugeCat = await prisma.iconCategory.findUnique({ where: { name: 'Fahrzeuge' } })
const infrastrukturCat = await prisma.iconCategory.findUnique({ where: { name: 'Infrastruktur' } })
const taktikCat = await prisma.iconCategory.findUnique({ where: { name: 'Taktik' } })
const feuerCat = await prisma.iconCategory.findUnique({ where: { id: 'feuer' } })
const wasserCat = await prisma.iconCategory.findUnique({ where: { id: 'wasser' } })
const gefahrstoffeCat = await prisma.iconCategory.findUnique({ where: { id: 'gefahrstoffe' } })
const verkehrCat = await prisma.iconCategory.findUnique({ where: { id: 'verkehr' } })
const personenCat = await prisma.iconCategory.findUnique({ where: { id: 'personen' } })
const fahrzeugeCat = await prisma.iconCategory.findUnique({ where: { id: 'fahrzeuge' } })
const infrastrukturCat = await prisma.iconCategory.findUnique({ where: { id: 'infrastruktur' } })
const taktikCat = await prisma.iconCategory.findUnique({ where: { id: 'taktik' } })
// Create system icons (these use inline SVG data URIs - in production, upload to MinIO)
const systemIcons = [