meldestelle/docs/06_Frontend/Navigation_Routing_Diagramm.md

10 KiB
Raw Blame History

type status owner last_update
Reference ACTIVE Lead Architect 2026-03-26

Navigation & Routing Diagramm — Meldestelle Desktop

🏗️ [Lead Architect] | 26. März 2026

Dieses Dokument visualisiert alle Screens und Navigationsübergänge der Compose Desktop App. Generiert aus: frontend/shells/meldestelle-desktop/src/jvmMain/kotlin/at/mocode/desktop/


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:

Icon Label Ziel-Screen Status
📅 Veranstaltungen Veranstaltungen Implementiert
🏇 Reiter Reiter Placeholder
🐴 Pferde Pferde Placeholder
👤 Funktionäre Funktionaere Placeholder
🏆 Meisterschaften Meisterschaften Placeholder
🥇 Cups Cups Placeholder
📥 Stammdaten-Import StammdatenImport 🟡 UI fertig, Polling offen

2. Vollständiges Navigationsfluss-Diagramm

flowchart TD
    %% ─── App-Start & Auth ───────────────────────────────────────────
    START([App Start]) --> LOGIN

    LOGIN["🔐 Login\n/auth/login"]
    LOGIN -->|"onSuccess (returnTo)"| VERANSTALTUNGEN

    AUTH_GUARD{{"🛡️ Auth Guard\n(nicht eingeloggt?)"}}
    AUTH_GUARD -->|"nicht authentifiziert"| LOGIN

    %% ─── NavRail Top-Level ──────────────────────────────────────────
    NAVRAIL(["🗂️ NavRail"])
    NAVRAIL --> VERANSTALTUNGEN
    NAVRAIL --> REITER
    NAVRAIL --> PFERDE
    NAVRAIL --> FUNKTIONAERE
    NAVRAIL --> MEISTERSCHAFTEN
    NAVRAIL --> CUPS
    NAVRAIL --> STAMMDATEN_IMPORT

    %% ─── Veranstaltungen-Flow ───────────────────────────────────────
    VERANSTALTUNGEN["📅 Veranstaltungen\n(AdminUebersichtScreen)\n/veranstaltungen"]
    VERANSTALTUNGEN -->|"+ Neue Veranstaltung"| VERANSTALTER_AUSWAHL
    VERANSTALTUNGEN -->|"Veranstaltung öffnen (id)"| VERANSTALTUNG_DETAIL

    VERANSTALTER_AUSWAHL["🏢 Veranstalter auswählen\n/veranstalter/auswahl"]
    VERANSTALTER_AUSWAHL -->|"Zurück"| VERANSTALTUNGEN
    VERANSTALTER_AUSWAHL -->|"Weiter (veranstalterId)"| VERANSTALTER_DETAIL

    VERANSTALTER_DETAIL["🏢 Veranstalter Detail\n/veranstalter/{id}"]
    VERANSTALTER_DETAIL -->|"Zurück"| VERANSTALTER_AUSWAHL
    VERANSTALTER_DETAIL -->|"Veranstaltung öffnen (vId)"| VERANSTALTUNG_UEBERSICHT
    VERANSTALTER_DETAIL -->|"Neue Veranstaltung gespeichert"| VERANSTALTER_DETAIL

    VERANSTALTUNG_UEBERSICHT["📋 Veranstaltung Übersicht\n/veranstalter/{verId}/veranstaltung/{vId}"]
    VERANSTALTUNG_UEBERSICHT -->|"Zurück"| VERANSTALTER_DETAIL
    VERANSTALTUNG_UEBERSICHT -->|"Turnier öffnen (tId)"| TURNIER_DETAIL
    VERANSTALTUNG_UEBERSICHT -->|"+ Neues Turnier"| TURNIER_NEU

    VERANSTALTUNG_DETAIL["📄 Veranstaltung Detail\n/veranstaltung/{id}"]
    VERANSTALTUNG_DETAIL -->|"Zurück"| VERANSTALTUNGEN
    VERANSTALTUNG_DETAIL -->|"+ Neues Turnier"| TURNIER_NEU
    VERANSTALTUNG_DETAIL -->|"Turnier öffnen (tId)"| TURNIER_DETAIL

    VERANSTALTUNG_NEU[" Neue Veranstaltung\n/veranstaltung/neu"]
    VERANSTALTUNG_NEU -->|"Zurück"| VERANSTALTUNGEN
    VERANSTALTUNG_NEU -->|"Speichern"| VERANSTALTUNGEN

    TURNIER_DETAIL["🏟️ Turnier Detail\n/veranstaltung/{vId}/turnier/{tId}\n(inkl. Nennungs-Tab ⭐)"]
    TURNIER_DETAIL -->|"Zurück"| VERANSTALTUNG_DETAIL

    TURNIER_NEU[" Neues Turnier\n/veranstaltung/{vId}/turnier/neu"]
    TURNIER_NEU -->|"Zurück"| VERANSTALTUNG_DETAIL
    TURNIER_NEU -->|"Speichern"| VERANSTALTUNG_DETAIL

    %% ─── Stammdaten-Import ──────────────────────────────────────────
    STAMMDATEN_IMPORT["📥 Stammdaten Import\n/stammdaten/import\n(ZNS ZIP-Import)"]

    %% ─── Placeholder Screens ────────────────────────────────────────
    REITER["🏇 Reiter\n/reiter\n⬜ Placeholder"]
    PFERDE["🐴 Pferde\n/pferde\n⬜ Placeholder"]
    FUNKTIONAERE["👤 Funktionäre\n/funktionaere\n⬜ Placeholder"]
    MEISTERSCHAFTEN["🏆 Meisterschaften\n/meisterschaften\n⬜ Placeholder"]
    CUPS["🥇 Cups\n/cups\n⬜ Placeholder"]

    %% ─── Logout ─────────────────────────────────────────────────────
    LOGOUT(["🚪 Logout"])
    LOGOUT -->|"Token löschen"| LOGIN

    %% ─── Styling ────────────────────────────────────────────────────
    style LOGIN fill:#f0a500,color:#000
    style AUTH_GUARD fill:#e74c3c,color:#fff
    style VERANSTALTUNGEN fill:#2ecc71,color:#000
    style TURNIER_DETAIL fill:#3498db,color:#fff
    style STAMMDATEN_IMPORT fill:#9b59b6,color:#fff
    style REITER fill:#bdc3c7,color:#555
    style PFERDE fill:#bdc3c7,color:#555
    style FUNKTIONAERE fill:#bdc3c7,color:#555
    style MEISTERSCHAFTEN fill:#bdc3c7,color:#555
    style CUPS fill:#bdc3c7,color:#555

3. Screens nach Status

Vollständig implementiert

Screen Route Komponente
Login /auth/login LoginScreen
Veranstaltungen (Übersicht) /veranstaltungen AdminUebersichtScreen
Veranstalter Auswahl /veranstalter/auswahl VeranstalterAuswahlScreen
Veranstalter Detail /veranstalter/{id} VeranstalterDetailScreen
Veranstaltung Übersicht /veranstalter/{verId}/veranstaltung/{vId} VeranstaltungUebersichtScreen
Veranstaltung Detail /veranstaltung/{id} VeranstaltungDetailScreen
Veranstaltung Neu /veranstaltung/neu VeranstaltungNeuScreen
Turnier Detail /veranstaltung/{vId}/turnier/{tId} TurnierDetailScreen + NennungsMaske
Turnier Neu /veranstaltung/{vId}/turnier/neu TurnierNeuScreen

🟡 Teilweise implementiert

Screen Route Offen
Stammdaten Import /stammdaten/import Status-Polling zum Backend fehlt (ZNS Phase 3)

Placeholder (NavRail sichtbar, Screen leer)

Screen Route
Reiter /reiter
Pferde /pferde
Funktionäre /funktionaere
Meisterschaften /meisterschaften
Cups /cups

🗑️ Definiert aber nicht in Desktop-Navigation eingebunden

Screen Route Hinweis
Landing / Web-App Relikt
Home /home Web-App Relikt
Dashboard /dashboard Web-App Relikt
Ping /ping Dev/Health-Check
Profile /profile Web-App Relikt
OrganizerProfile /organizer/profile Web-App Relikt
AuthCallback /auth/callback Web-App Relikt (OAuth Redirect)
Nennung /nennung Web-App Relikt
CreateTournament /tournament/create Web-App Relikt

4. Wichtige Hinweise

Auth Guard

Jeder Screen (außer Login) ist durch den Auth Guard geschützt:

if (!authState.isAuthenticated && currentScreen !is AppScreen.Login) {
    nav.navigateToScreen(AppScreen.Login(returnTo = AppScreen.Veranstaltungen))
}

Web-App Relikte im AppScreen

Es existieren 9 Screens (Landing, Home, Dashboard, Ping, Profile, OrganizerProfile, AuthCallback, Nennung, CreateTournament), die aus der alten Web-App stammen und in der Desktop-App nicht gerendert werden. → Offene Entscheidung: Bereinigen oder für zukünftige Web-App-Phase behalten? Siehe ADR-Bedarf.

Nennungs-Tab

Der TurnierDetailScreen enthält den wichtigsten fachlichen Screen: die NennungsMaske (Bewerbe-Tab). Dies ist das Herzstück des registration-context.


5. Referenzen

  • Quellcode: frontend/shells/meldestelle-desktop/src/jvmMain/kotlin/at/mocode/desktop/DesktopApp.kt
  • Quellcode: frontend/shells/meldestelle-desktop/src/jvmMain/kotlin/at/mocode/desktop/screens/DesktopMainLayout.kt
  • Quellcode: frontend/core/src/commonMain/kotlin/at/mocode/frontend/core/navigation/AppScreen.kt
  • ZNS-Importer Roadmap: docs/01_Architecture/Roadmap_ZNS_Importer.md
  • Figma Design-Baseline: Vision_03 (ADR Session Log 2026-03-24)