meldestelle/docs/06_Frontend/Navigation_V3_Screen-Baum_und_Back-Stack.md
StefanMoCoAt 85282ea7b4
Some checks failed
Build and Publish Docker Images / build-and-push (., backend/infrastructure/gateway/Dockerfile, api-gateway, api-gateway) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., backend/services/ping/Dockerfile, ping-service, ping-service) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., config/docker/caddy/web-app/Dockerfile, web-app, web-app) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., config/docker/keycloak/Dockerfile, keycloak, keycloak) (push) Has been cancelled
Update documentation for Navigation V3 and tenant concept: Mark Navigation V2 as deprecated, link replacement documentation, and expand tenant concept details with frontend and backend integration guidelines.
2026-04-02 23:17:07 +02:00

5.9 KiB
Raw Permalink Blame History

type status owner last_update sources replaces
Frontend ACTIVE 🎨 Frontend Expert & 🧹 Curator 2026-04-02
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
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
  • TenantKonzept (eine Veranstaltung = ein Tenant): docs/01_Architecture/Reference/Tenant-Konzept_Eine-Veranstaltung-eine-Datenbank.md