# DiaryView Port: Umsetzungsstand Android

## Stand 2026-05-26
Die priorisierten Funktionsblöcke A bis F sind in der nativen Android-Diary-Ansicht umgesetzt. Die Android-Oberflaeche bildet die Workflows mobilgerecht ab; sie kopiert nicht die Web-Anordnung pixelgenau.

- Plan: Haupt- und Gruppenaktivitaeten anlegen, bearbeiten, zuordnen, sortieren und loeschen; Zeitbloecke; Gruppenfilter und Bereitschaftsstatus.
- Teilnehmer: Status/Gruppe, Testmitglied-Schnellanlage, Formular-Uebergabe, erweiterte Suche und letzte Teilnahmen.
- Gruppen: Anlegen (auch mehrere), Umbenennen/Lead bearbeiten und bestaetigtes Loeschen.
- Medien/Export: Galerie, Aktivitaetsbilder, Court-Drawing-Editor mit Schlagsequenzen; vorhandene Zeichnungen werden per Icon in einem Dialog angezeigt; Tages-PDF inklusive Gruppen-/Teilnehmerzuordnung.
- Sicherheit/Livedaten: Loeschen eines Trainingstags nur leer und nach Bestaetigung; Diary-relevante Aktualisierungen bleiben in der vorhandenen Live-Aktualisierung.

## Web-Referenz

### Verwendete Components
- `CourtDrawingRender`
- `CourtDrawingDialog`
- `InfoDialog`
- `ConfirmDialog`
- `ImageDialog`
- `BaseDialog`
- `MemberNotesDialog`
- `TagHistoryDialog`
- `MemberActivityStatsDialog`
- `AccidentFormDialog`
- `QuickAddMemberDialog`
- `MemberGalleryDialog`
- `PDFGenerator` (JS-Utility)

### Services / Utilities / Composables
- `apiClient` (viele REST-Aufrufe)
- `socketService` (`connectSocket`, `disconnectSocket`, `on*`, `off*`)
- Vuex `mapGetters`: `isAuthenticated`, `currentClub`, `currentClubName`
- Sortable/Drag&Drop Logik (Order-Updates)

### Store-Abhängigkeiten
- Auth/Session und Club-Kontext kommen aus Store-Gettern:
  - `isAuthenticated`
  - `currentClub`
  - `currentClubName`

### API-Aufrufe
- Diary Core: `/diary/{clubId}` (GET/POST/PUT/DELETE)
- Participants: `/participants/*`, `/participants/{dateId}/{memberId}/group`
- Activities: `/activities/{dateId}`, `/activities/add`
- Tags/Notes: `/tags`, `/diary/tag/*`, `/diarymember/*`
- Plan: `/diary-date-activities/*`, `/diary-date-activities/group/*`, `/diary-member-activities/*`
- Groups: `/group/{clubId}/{dateId}`, `/group`, `/group/{groupId}`
- Training context: `/training-groups/{clubId}`, `/training-times/{clubId}`
- Member images/gallery: `/clubmembers/image/*`
- Stats: `/member-activities/*`
- Accident: `/accident`, `/accident/{clubId}/{dateId}`
- Predefined activities + search + create/update: `/predefined-activities*`

### Socket-Events in DiaryView
- Participants: `participant:added`, `participant:removed`, `participant:updated`
- Diary: `diary:note:added`, `diary:note:deleted`, `diary:tag:added`, `diary:tag:removed`, `diary:date:updated`
- Activity member: `activity-member:added`, `activity-member:removed`
- Activity: `activity:changed`
- Member: `member:changed`
- Group: `group:changed`

## Mobile Abbildung
Die Umsetzung bleibt bewusst in den vorhandenen Compose- und Shared-Bausteinen. Neue, eigenstaendige UI-Bausteine sind insbesondere `DiaryCourtDrawing.kt` sowie ausgelagerte Diary-Dialog-/Toolbar-Composables in `AppRoot.kt`. Die Shared-DTOs akzeptieren Drawing-Daten auch fuer eingebettete Planaktivitaeten.

## Umsetzungsbloecke

### Block A: Training-Plan Vollstaendigkeit - umgesetzt
- Group-Activities (`/diary-date-activities/group*`)
- Activity-Member-Zuordnung (`/diary-member-activities/*`)
- Plan-Item Group-Update, Duration/DurationText vollständig
- Reihenfolge per mobil geeigneten Hoch-/Runter-Aktionen

### Block B: Teilnehmer- und Mitglieder-Dialoge - umgesetzt
- MemberNotesDialog-Äquivalent (inkl. Tag-Zuordnung auf Member+Date)
- QuickAddMemberDialog inkl. `clubmembers/set`
- Activity-Stats mit letzten Teilnahmen; die im Web-Template verbliebene `TagHistoryDialog`-Deklaration ist dort aus der sichtbaren Teilnehmeraktion nicht erreichbar (`openTagInfos` oeffnet die Statistik)

### Block C: Gruppenverwaltung + Vorschlagslogik - umgesetzt
- Gruppen CRUD (`/group*`) inklusive Lead
- New-Date Dialog mit TrainingGroup/TrainingTimes-Vorschlag

### Block D: Bilder/Galerie + Export - umgesetzt
- MemberGalleryDialog + Bildaufrufe
- ImageDialog
- TrainingDay PDF-Export (oder Android-kompatible Alternative)

### Block E: Accident + Drawing - umgesetzt
- AccidentFormDialog (`/accident*`)
- CourtDrawingDialog/Render-Flow mit bis zu vier Folgeschlaegen, PredefinedActivity-Sync und Listeneintrag-Icon statt Inline-Zeichnung

### Block F: Socket-Live-Updates - umgesetzt
- Nur Diary-relevante Event-Subsets robust in VM integrieren
- Dokumentation in `/docs/socket_contract.md`

## Verifikation
- Android-Compile: `./gradlew :composeApp:compileDebugKotlinAndroid`
- Shared DTO Regression: `DiaryDrawingSerializationTest`
- Manuelle Diary-Faelle: `mobile-app/REGRESSION_CHECKLIST.md`
