# Training Block Port (Teil 2)

Stand: 2026-03-06

## Umgesetzt

### 1) PredefinedActivities.vue -> Android
- Vollständiger Screen-Flow in Compose: Listenansicht, Suche, Auswahl, Editor, Save/Cancel.
- Merge/Deduplicate mit Confirm-Dialogen.
- Duplicate-Code-Check vor Create mit expliziter Bestätigung.
- Bildliste + Bildlöschung (mit Confirm).
- Loading/Error/Retry über bestehendes ErrorFeedback-Muster (`ErrorBanner` + `SnackbarHost`).
- MVVM + StateFlow umgesetzt über:
  - `PredefinedActivitiesScreen.kt`
  - `PredefinedActivitiesViewModel.kt`
  - `PredefinedActivitiesService.kt`
  - `TrainingstagebuchRepository.kt`

### 2) TrainingStatsView.vue -> Android
- Vollständiger Compose-Screen mit:
  - KPI-Übersicht (aktueller Monat, letzter Monat, stärkstes Quartal, Halbjahr, Jahr)
  - Collapsible Trainingstage
  - Collapsible Mitgliederbereich mit Sortierung
  - Detaildialog pro Mitglied
- Detaildialog lädt zusätzlich echte API-Daten:
  - Activity-Stats
  - Last Participations
- Loading/Error/Retry sowohl auf Seitenebene als auch im Detaildialog.
- MVVM + StateFlow umgesetzt über:
  - `TrainingStatsScreen.kt`
  - `TrainingStatsViewModel.kt`
  - `TrainingStatsService.kt`
  - `TrainingstagebuchRepository.kt`

### 3) Zentrale Wiederverwendung
- Gemeinsame periodische KPI-/Datumslogik als Utility zentralisiert:
  - `utils/TrainingStatsMetrics.kt`
- Minimale Unit-Tests ergänzt:
  - `utils/TrainingStatsMetricsTest.kt`

## Genutzte API-Endpunkte

### Predefined Activities
- `GET /predefined-activities`
- `GET /predefined-activities/{id}`
- `GET /predefined-activities/search/query?q={term}&limit={n}`
- `POST /predefined-activities`
- `PUT /predefined-activities/{id}`
- `POST /predefined-activities/merge`
- `POST /predefined-activities/deduplicate`
- `DELETE /predefined-activities/{id}/image/{imageId}`

### Training Stats
- `GET /training-stats/{clubId}`
- `GET /member-activities/{clubId}/{memberId}?period=all`
- `GET /member-activities/{clubId}/{memberId}/last-participations?limit=3`

## Unterschiede zur Vue-Version (offen)
- `PredefinedActivities`: CourtDrawingDialog/CourtDrawingTool UI ist in Android noch nicht 1:1 vorhanden.
- `PredefinedActivities`: Image-Upload-Flow (`POST/PUT /predefined-activities/{id}/image`) ist weiterhin offen.
- `TrainingStats`: Web-`TrainingDetailsDialog`-Layout wurde funktional portiert, aber visuell nicht pixelgleich übernommen.
