diff --git a/backend/src/database/migrations/049_add_parent_id_to_kategorien.sql b/backend/src/database/migrations/049_add_parent_id_to_kategorien.sql new file mode 100644 index 0000000..5d72a20 --- /dev/null +++ b/backend/src/database/migrations/049_add_parent_id_to_kategorien.sql @@ -0,0 +1,13 @@ +-- Migration 049: Add parent_id to categories for subcategory support +-- (048 already created the table without parent_id) + +ALTER TABLE ausruestung_kategorien_katalog + ADD COLUMN IF NOT EXISTS parent_id INT REFERENCES ausruestung_kategorien_katalog(id) ON DELETE CASCADE; + +-- Unique: top-level categories by name +CREATE UNIQUE INDEX IF NOT EXISTS ausruestung_kat_top_unique + ON ausruestung_kategorien_katalog (name) WHERE parent_id IS NULL; + +-- Unique: subcategories by (parent_id, name) +CREATE UNIQUE INDEX IF NOT EXISTS ausruestung_kat_child_unique + ON ausruestung_kategorien_katalog (parent_id, name) WHERE parent_id IS NOT NULL; diff --git a/backend/src/services/ausruestungsanfrage.service.ts b/backend/src/services/ausruestungsanfrage.service.ts index 9535c50..f8b8315 100644 --- a/backend/src/services/ausruestungsanfrage.service.ts +++ b/backend/src/services/ausruestungsanfrage.service.ts @@ -286,8 +286,8 @@ async function getRequests(filters?: { status?: string; anfrager_id?: string }) const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : ''; const result = await pool.query( `SELECT a.*, - u.vorname || ' ' || u.nachname AS anfrager_name, - u2.vorname || ' ' || u2.nachname AS bearbeitet_von_name, + u.display_name AS anfrager_name, + u2.display_name AS bearbeitet_von_name, (SELECT COUNT(*)::int FROM ausruestung_anfrage_positionen p WHERE p.anfrage_id = a.id) AS positionen_count FROM ausruestung_anfragen a LEFT JOIN users u ON u.id = a.anfrager_id @@ -314,8 +314,8 @@ async function getMyRequests(userId: string) { async function getRequestById(id: number) { const reqResult = await pool.query( `SELECT a.*, - u.vorname || ' ' || u.nachname AS anfrager_name, - u2.vorname || ' ' || u2.nachname AS bearbeitet_von_name + u.display_name AS anfrager_name, + u2.display_name AS bearbeitet_von_name FROM ausruestung_anfragen a LEFT JOIN users u ON u.id = a.anfrager_id LEFT JOIN users u2 ON u2.id = a.bearbeitet_von