Migrate frontend navigation to V3: archive Navigation V2, implement updated screen-tree and back-stack rules, and adapt documentation for startable MVP flow.

This commit is contained in:
2026-04-02 20:09:22 +02:00
parent 8b40a0624b
commit b787504474
10 changed files with 563 additions and 21 deletions
@@ -14,6 +14,12 @@ Generiert aus: `frontend/shells/meldestelle-desktop/src/jvmMain/kotlin/at/mocode
---
MVP-Hinweis (2026-04-02):
- Die DesktopApp startet im MVP ohne erzwungenen Login/Ping direkt in die HauptShell (VeranstaltungsVerwaltung).
- Der LoginKnoten und AuthGuard im Diagramm bleiben aus Planungsgründen sichtbar, sind jedoch im MVP deaktiviert.
---
## 1. Übersicht: NavRail-Einstiegspunkte
Die linke Navigationsleiste (NavRail) bietet folgende Direkteinstiege:
@@ -0,0 +1,15 @@
---
type: Redirect
status: MOVED
owner: 🧹 Curator
last_update: 2026-04-02
moved_to: docs/_archive/06_Frontend/Navigation_V2_Screen-Baum_und_Back-Stack.md
replaced_by: docs/06_Frontend/Navigation_V3_Screen-Baum_und_Back-Stack.md
---
# Navigation V2 — verschoben ins Archiv
Dieses Dokument wurde in das Archiv verschoben und durch „V3“ ersetzt.
- Archiv: `docs/_archive/06_Frontend/Navigation_V2_Screen-Baum_und_Back-Stack.md`
- Aktuelle Version: `docs/06_Frontend/Navigation_V3_Screen-Baum_und_Back-Stack.md`
@@ -0,0 +1,125 @@
---
type: Frontend
status: ACTIVE
owner: 🎨 Frontend Expert & 🧹 Curator
last_update: 2026-04-02
sources:
- docs/06_Frontend/Navigation_Routing_Diagramm.md
- docs/02_Guides/Event-First-Workflow.md
- docs/99_Journal/2026-04-02_Meldestelle_Besprechung_Session-Log.md
replaces: docs/06_Frontend/Navigation_V2_Screen-Baum_und_Back-Stack.md
---
# Navigation V3 — ScreenBaum & BackStackRegeln (jetzt gültig)
Dieses Dokument beschreibt die jetzt gültige, startfähige Fassung der DesktopApp Navigation (Compose Multiplatform, MVPStand ohne erzwungenen Login/Ping).
---
## 1. ScreenBaum (Routen)
- AppRoot
- MainShell (ohne Login/Ping)
- Veranstaltungen (TabRoot)
- Veranstaltung.Detail(eventId)
- Turnier.Detail(tournamentId)
- Bewerb.Detail(contestId)
- Abteilung.Detail(divisionId)
- Startliste(divisionId)
- Kassa.Turnier(tournamentId)
- Kassa.Veranstaltung(eventId)
- StammdatenImport (TabRoot)
- Reiter (TabRoot, Placeholder)
- Pferde (TabRoot, Placeholder)
- Funktionaere (TabRoot, Placeholder)
- Meisterschaften (TabRoot, Placeholder)
- Cups (TabRoot, Placeholder)
Hinweise:
- Fachliche Struktur folgt dem EventFirstWorkflow: Veranstaltung → Turnier → Bewerb → Abteilung. Abteilung ist kleinste ausführbare Einheit.
- KassenScreens existieren getrennt für Turnier und Veranstaltung (Terminologie gemäß Ubiquitous Language).
---
## 1a. HauptShell (Abfragen, Status & Einstieg)
Quellen: `frontend/shells/meldestelle-desktop/src/jvmMain/kotlin/at/mocode/desktop/DesktopApp.kt`,
`frontend/shells/meldestelle-desktop/src/jvmMain/kotlin/at/mocode/desktop/screens/layout/DesktopMainLayout.kt`,
`frontend/shells/meldestelle-desktop/src/jvmMain/kotlin/at/mocode/desktop/navigation/DesktopNavigationPort.kt`
- Einstieg/Startzustand
- StartScreen in der DesktopShell ist `AppScreen.Onboarding` (siehe `DesktopNavigationPort`, Initialwert und `DesktopApp` LoginGate).
- Onboarding setzt im MVP ein DummyToken via `AuthTokenManager.setToken(...)` und leitet in `VeranstaltungVerwaltung` weiter.
- Kein erzwungener Login im MVP: `DesktopApp` erlaubt zentrale Screens ohne Auth, LoginRoute existiert weiterhin optional.
- TopBar (Breadcrumb)
- Zeigt kontextabhängige Breadcrumbs (Verwaltung → Veranstalter → Veranstaltung → Turnier ...), inkl. KlickNavigation auf Eltern.
- Kein LogoutButton im MVP (auf Kundenwunsch entfernt).
- Content (Screens)
- Zentrale Verwaltung: `VeranstaltungVerwaltungV2` mit NavigationsCallbacks zu Profilen, Import, Reiter/Pferde/Funktionäre/Vereine.
- PingScreen existiert (`PingScreen`/`PingViewModel`), ist aber kein Einstiegspunkt und wird nicht automatisch abgefragt.
- Footer/Statusleiste (`DesktopFooterBar`)
- Zeigt Online/OfflineStatus (MVP: StubState), GeräteVerbindungsstatus inkl. Gerätename „RichterTurm“ (Stub) und ChatTrigger, wenn Gerät verbunden.
- Dient rein der Anzeige; keine NavigationsEinträge im BackStack.
- ValidierungsHinweise
- Bei inkonsistentem Kontext (z. B. IDs nicht vorhanden) wird ein `InvalidContextNotice` mit Rücksprung angeboten.
---
## 2. NavigationsKonventionen
- Route IDs: stabile, serialisierbare IDs (`eventId`, `tournamentId`, `contestId`, `divisionId`).
- SingleTop/SingleTask je Tab: erneuter Klick auf einen Tab bringt zum jeweiligen TabRoot, Stack bleibt je Tab erhalten.
- Hierarchischer Drilldown (Parent → Child). „Zurück“ führt jeweils eine Ebene hoch.
- Deep Links: `app://event/{eventId}/tournament/{tId}/contest/{cId}/division/{dId}` öffnen direkt die Abteilung; Eltern werden synthetisch für den BackPfad aufgebaut.
---
## 3. BackStackRegeln (V3)
1) AppStart
- Startet in MainShell → Tab „Veranstaltungen“.
2) Wechsel Tab → Tab
- Eigener Stack je Tab; Wechsel speichert und restauriert den jeweiligen Stack (SingleTask je Tab).
3) Navigieren innerhalb „Veranstaltungen“
- Veranstaltungen (Liste) → Veranstaltung.Detail → Turnier.Detail → Bewerb.Detail → Abteilung.Detail → Startliste.
- „Zurück“ springt exakt eine Ebene zurück; beim Verlassen von Startliste zurück zur Abteilung.
4) Kassa öffnen
- Von Turnier.Detail zu Kassa.Turnier: Push auf Stack, Back kehrt zu Turnier.Detail zurück.
- Von Veranstaltung.Detail zu Kassa.Veranstaltung: Push auf Stack, Back kehrt zu Veranstaltung.Detail zurück.
5) OverrideDialoge (Regelwerk)
- Modal/Sheet, kein eigener StackEintrag. Schließen kehrt zum aktuellen Screen zurück. OverrideEvents werden protokolliert.
6) Auth/Logout (MVP)
- Kein erzwungener Login; LogoutSonderregeln aus V2 sind im MVP nicht aktiv. Bei späterer Aktivierung gelten die bisherigen Regeln (MainShellStack leeren, zurück zum Entry).
---
## 4. Zustandsmanagement
- Screens sind UDF/MVVMkompatibel (Details separat dokumentiert).
- NavigationState kann optional `returnTo` für spätere LoginFlows halten; im MVP ohne Wirkung.
---
## 5. EdgeCases & Tests
- Abteilungswechsel: Beim Wechsel der Abteilung innerhalb eines Bewerbs bleibt der Stack auf BewerbEbene erhalten; nur das AbteilungDetail wird ersetzt.
- Datenverlust vermeiden: Vor Navigation prüfen, ob ungespeicherte Änderungen vorliegen (z. B. KassaBuchung), ggf. ConfirmDialog.
- DeepLink Pfadaufbau: synthetische Eltern korrekt in den BackPfad einhängen.
---
## 6. Querverweise
- RoutingDiagramm: `docs/06_Frontend/Navigation_Routing_Diagramm.md`
- EventFirstWorkflow: `docs/02_Guides/Event-First-Workflow.md`
- Begriffe: `docs/03_Domain/01_Glossary/Ubiquitous_Language.md`
- Analyse/Begründung: `docs/06_Frontend/Reports/2026-04-02_Navigation_Versionierung_Analyse_V2_vs_V3.md`
@@ -0,0 +1,103 @@
---
type: Report
status: ACTIVE
owner: 🎨 Frontend Expert
last_update: 2026-04-02
sources:
- docs/99_Journal/2026-04-02_Meldestelle_Besprechung_Session-Log.md
- docs/_archive/06_Frontend/Navigation_V2_Screen-Baum_und_Back-Stack.md
- docs/06_Frontend/Navigation_Routing_Diagramm.md
- docs/02_Guides/Event-First-Workflow.md
---
# Frontend Navigation — Versionsanalyse V2 → V3
Dieses Dokument analysiert die Abweichungen zwischen der Dokumentation „Navigation V2“ und der tatsächlich startfähigen DesktopApp und legt ein konsistentes Vorgehen für „V3“ fest.
---
## 1) Zusammenfassung (Executive Brief)
- Problem: „Navigation V2“ enthält Elemente (Ping/SystemStatus, LoginFlow), die in der aktuell startfähigen DesktopApp nicht aktiv genutzt werden. Dadurch entstand ein VersionsDrift in Doku und Kommunikation („V2“ wurde fälschlich als aktuell betrachtet).
- Entscheidung: Wir führen „V3“ als jetzt gültige, startfähige Fassung ein. „V2“ wird als „DEPRECATED“ markiert und bleibt als Referenz erhalten.
- Ziel: Einheitliche, aktuelle SSoT für Navigation/BackStack, synchron mit EventFirstWorkflow und der laufenden DesktopApp.
---
## 2) Befunde (V2 vs. aktueller Stand)
- StartPfad
- V2: „Landing → SystemStatus (Ping), Login“ beschrieben.
- Aktuell: App startet ohne aktiven PingScreen und ohne verpflichtenden LoginFlow direkt in die HauptShell.
- Auth/Login
- V2: Login/returnTo vorgesehen, BackStack berücksichtigt Logout.
- Aktuell: Kein aktiver LoginZwang; LogoutRegel daher für MVP nicht relevant.
- Tabs/NavRail
- V2: HauptTabs wie Dashboard, Veranstaltungen, Suche, Einstellungen.
- Aktuell: „Veranstaltungen“ ist implementiert; weitere Bereiche sind (teils) Placeholder. Siehe „Navigation_Routing_Diagramm.md“ (Stand 20260326).
- EventFirstWorkflow
- Konsistenz: Die fachliche Hierarchie Veranstaltung → Turnier → Bewerb → Abteilung bleibt gültig (SessionLog 20260402).
- Kleinste ausführbare Einheit: Abteilung.
- KassaFlows
- Terminologie und Platzierung (Turnierkassa, VeranstaltungsKassa) bleiben konzeptionell richtig; UIVerfügbarkeit im MVP ist noch selektiv.
---
## 3) Vorschlag „V3“ (jetzt gültige Fassung)
- Start & Shell
- AppRoot startet direkt in „MainShell“ (ohne Ping/Login).
- Primärer Einstiegspunkt: Tab „Veranstaltungen“.
- Tabs/NavRail (V3 Status)
- Veranstaltungen: ACTIVE (implementiert)
- StammdatenImport: ACTIVE (UI vorhanden; Polling noch offen laut Diagramm)
- Reiter, Pferde, Funktionäre, Meisterschaften, Cups: PLACEHOLDER
- Drilldown Veranstaltungen (V3)
- Veranstaltungen (Liste)
→ Veranstaltung.Detail
→ Turnier.Detail (inkl. NennungsTab / Stammdaten v2)
→ Bewerb.Detail → Abteilung.Detail → Startliste
- Back: jeweils exakt eine Ebene hoch (keine modale Einträge im Stack)
- BackStack Regeln (V3)
- Tabs: SingleTop/SingleTask je Tab (Wechsel erhält jeweiligen Stack)
- Modale OverrideDialoge: kein eigener StackEintrag; Schließen kehrt zurück
- LogoutSonderfall: vorerst „n. v.“ im MVP (kein erzwungener Login)
---
## 4) Migration & Aufräumen
- Dokumente
- „Navigation_V2_ScreenBaum_und_BackStack.md“ → Status: DEPRECATED, Verweis auf „Navigation_V3_…“
- Neues Dokument: „Navigation_V3_ScreenBaum_und_BackStack.md“ (jetzt gültige Fassung)
- Querverweise
- SessionLogs und Roadmaps behalten Verweise auf V2 als historische Referenz, ergänzen aber den Link zu V3 als SSoT.
- CodeAusrichtung (nonfunctional in diesem Schritt)
- Prüfen, ob RoutingGuards/LoginArtefakte im Code noch referenziert werden; falls ja, als FeatureFlags/TODO kennzeichnen oder entfernen, um DokuDrift zu vermeiden.
---
## 5) Akzeptanzkriterien (V3)
- Beim AppStart landet der User ohne Ping/Login direkt im Tab „Veranstaltungen“.
- TabWechsel bewahrt je Tab den eigenen Stack (SingleTop/SingleTask Verhalten dokumentiert).
- Drilldown und BackNavigation entlang EventFirstWorkflow funktionieren deterministisch (eine Ebene zurück).
- Dokumente sind konsistent: V3 beschreibt genau das implementierte Verhalten; V2 ist klar als veraltet markiert.
---
## 6) Nächste Schritte
1) V3Dokument erstellen und verlinken (dieser Commit)
2) V2 als DEPRECATED markieren (dieser Commit)
3) Optional: Navigation_Routing_Diagramm auf „kein Login/Ping im MVP“ ergänzen
4) Review durch 🏗️ Lead Architect und 🧹 Curator; danach V3 als SSoT in Roadmaps/Logs referenzieren