Admin-UI: Hauptnavigation mit Tabs (User / Inventare / Backups) #90

Closed
opened 2026-05-17 09:17:49 +00:00 by jreinemann-euris · 1 comment
jreinemann-euris commented 2026-05-17 09:17:49 +00:00 (Migrated from github.com)

Kontext

Die Admin-Seite (/admin/index.html) wächst. Bislang sind User-Verwaltung und Inventar-Ansicht unstrukturiert in einer einzigen Seite. Backups sollen künftig ebenfalls sichtbar sein.

Ziel

Hauptnavigation (Tab-Leiste) oben auf der Admin-Seite einfügen. Nach dem Login sind alle drei Tabs sichtbar.


Akzeptanzkriterien

1. Tab-Navigation im Frontend

  • Tab-Leiste mit drei Einträgen: User, Inventare, Backups
  • Aktiver Tab ist visuell hervorgehoben
  • Nur der Inhalt des aktiven Tabs ist sichtbar, die anderen sind ausgeblendet
  • Beim Laden der Seite ist der Tab User standardmäßig aktiv

2. Tab »User«

  • Enthält die bisherige User-Verwaltung unverändert (Tabelle + Aktionen)

3. Tab »Inventare«

  • Enthält die bisherige Inventar-Statistik (Akkordeon) und Inventar-Tabelle unverändert

4. Tab »Backups«

  • Neuer Server-Endpoint \GET /api/admin/backups\ liefert Liste der vorhandenen .sql.gz-Dateien aus dem Backup-Verzeichnis (/backups)
    • Response: JSON-Array mit { name, sizeBytes, createdAt }\ pro Datei, absteigend nach Datum sortiert
    • Endpoint ist JWT-geschützt (wie alle anderen Admin-Endpoints)
  • Admin-UI zeigt die Backup-Liste als Tabelle: Dateiname, Größe (human-readable, z.B. »2,1 KB«), Erstellt
  • Tabelle wird beim Aktivieren des Tabs automatisch geladen (kein separater Reload-Button nötig, aber ein Refresh-Button ist willkommen)
  • Bei leerem Backup-Verzeichnis: Hinweistext »Keine Backups vorhanden«

Technische Hinweise

  • Backup-Dateien liegen im Docker-Volume \ackup_data\ → Pfad im Container: /backups\
  • Der Server-Container hat keinen Zugriff auf das Backup-Volume – der Endpoint muss entweder:
    • a) im Backup-Container als minimaler HTTP-Server ergänzt werden, oder
    • b) das Backup-Volume zusätzlich in den Server-Container eingebunden werden (\docker-compose.yml)
    • Empfehlung: Option b) – read-only Mount \ackup_data:/backups:ro\ im \krisenvorrat-Service
  • Bestehende Admin-Endpoints: \GET /api/admin/users, \POST /api/admin/users, etc. (Ktor-Route in \AdminRoutes.kt)
## Kontext Die Admin-Seite (\/admin/index.html\) wächst. Bislang sind User-Verwaltung und Inventar-Ansicht unstrukturiert in einer einzigen Seite. Backups sollen künftig ebenfalls sichtbar sein. ## Ziel Hauptnavigation (Tab-Leiste) oben auf der Admin-Seite einfügen. Nach dem Login sind alle drei Tabs sichtbar. --- ## Akzeptanzkriterien ### 1. Tab-Navigation im Frontend - [ ] Tab-Leiste mit drei Einträgen: **User**, **Inventare**, **Backups** - [ ] Aktiver Tab ist visuell hervorgehoben - [ ] Nur der Inhalt des aktiven Tabs ist sichtbar, die anderen sind ausgeblendet - [ ] Beim Laden der Seite ist der Tab **User** standardmäßig aktiv ### 2. Tab »User« - [ ] Enthält die bisherige User-Verwaltung unverändert (Tabelle + Aktionen) ### 3. Tab »Inventare« - [ ] Enthält die bisherige Inventar-Statistik (Akkordeon) und Inventar-Tabelle unverändert ### 4. Tab »Backups« - [ ] Neuer Server-Endpoint \GET /api/admin/backups\ liefert Liste der vorhandenen \.sql.gz\-Dateien aus dem Backup-Verzeichnis (\/backups\) - Response: JSON-Array mit \{ name, sizeBytes, createdAt }\ pro Datei, absteigend nach Datum sortiert - Endpoint ist JWT-geschützt (wie alle anderen Admin-Endpoints) - [ ] Admin-UI zeigt die Backup-Liste als Tabelle: **Dateiname**, **Größe** (human-readable, z.B. »2,1 KB«), **Erstellt** - [ ] Tabelle wird beim Aktivieren des Tabs automatisch geladen (kein separater Reload-Button nötig, aber ein Refresh-Button ist willkommen) - [ ] Bei leerem Backup-Verzeichnis: Hinweistext »Keine Backups vorhanden« ## Technische Hinweise - Backup-Dateien liegen im Docker-Volume \ackup_data\ → Pfad im Container: \/backups\ - Der Server-Container hat keinen Zugriff auf das Backup-Volume – der Endpoint muss entweder: - a) im **Backup-Container** als minimaler HTTP-Server ergänzt werden, oder - b) das **Backup-Volume** zusätzlich in den Server-Container eingebunden werden (\docker-compose.yml\) - Empfehlung: Option b) – read-only Mount \ackup_data:/backups:ro\ im \krisenvorrat\-Service - Bestehende Admin-Endpoints: \GET /api/admin/users\, \POST /api/admin/users\, etc. (Ktor-Route in \AdminRoutes.kt\)
jreinemann-euris commented 2026-05-17 10:01:15 +00:00 (Migrated from github.com)

Abgeschlossen (2026-05-17)

Zyklen: 1
Tests: 139 Tests (4 neue), 0 Fehler

Implementierte Artefakte

  • Tab-Navigation: 3 Tabs (User, Inventare, Backups) mit visueller Hervorhebung
  • Tab User: bisherige Statistiken + Benutzerverwaltung unverändert
  • Tab Inventare: bisherige Inventar-Übersicht unverändert
  • Tab Backups: GET /api/admin/backups Endpoint + Tabelle (Dateiname, Größe, Erstellt)
  • docker-compose.yml: backup_data:/backups:ro Mount im Server-Container
  • 4 Tests: Admin-Backups Auth (200/403/401) + sortierte Dateiliste

Abweichungen

keine

## Abgeschlossen (2026-05-17) **Zyklen:** 1 **Tests:** ✅ 139 Tests (4 neue), 0 Fehler ### Implementierte Artefakte - ✅ Tab-Navigation: 3 Tabs (User, Inventare, Backups) mit visueller Hervorhebung - ✅ Tab User: bisherige Statistiken + Benutzerverwaltung unverändert - ✅ Tab Inventare: bisherige Inventar-Übersicht unverändert - ✅ Tab Backups: GET /api/admin/backups Endpoint + Tabelle (Dateiname, Größe, Erstellt) - ✅ docker-compose.yml: backup_data:/backups:ro Mount im Server-Container - ✅ 4 Tests: Admin-Backups Auth (200/403/401) + sortierte Dateiliste ### Abweichungen keine
Sign in to join this conversation.
No description provided.