2026-04-28 16:18:25 +02:00
# Gelieferte Features & technische Basis (April 2026)
2026-05-05 08:30:48 +02:00
**Stand:** 2026-04-30
**Referenz:** `backend/version.py` — **APP_VERSION 0.8.7** , **DB_SCHEMA_VERSION 20260430034**
2026-04-28 16:18:25 +02:00
2026-05-05 08:30:48 +02:00
Dieses Dokument bündelt die in der Entwicklungsphase erreichten **lieferbaren** Funktionen und die zugehörigen **technischen Artefakte** . **Progressionsgraph zwischen Übungen** (Zwischenstand, Grenzen): ** `technical/TRAINING_FRAMEWORK_SPEC.md` ** §3– §4. Detail-Spezifikationen bleiben in den verlinkten Pfaden unter `.claude/docs/technical/` und `.claude/docs/functional/` .
2026-04-28 16:18:25 +02:00
---
## 1. Datenbank-Migrationen (Auswahl)
| Migration | Inhalt |
|-----------|--------|
2026-05-05 08:30:48 +02:00
| **032– 034** | **Progressionsgraph Übung→Übung:** Container `exercise_progression_graphs` , Kanten `exercise_progression_edges` ; ** `notes` ** (033); optionale Varianten-Endpunkte + Constraints (034) |
2026-04-28 16:18:25 +02:00
| **028** | `exercise_media` erweitert (Embed/Metadaten), `exercise_skills` Level-Felder (VARCHAR); Medien-API |
| **029** | Kanonische Fähigkeitsstufen (basis– optimierung), `model_levels` -Namen |
| **030** | `training_unit_exercises.exercise_variant_id` → FK `exercise_variants(id)` ON DELETE SET NULL |
---
2026-05-05 08:30:48 +02:00
## 2. Backend – Progressionsgraphen (`routers/exercise_progression_graphs.py`)
2026-04-28 16:18:25 +02:00
2026-05-05 08:30:48 +02:00
- REST unter ** `/api/exercise-progression-graphs` ** inkl. Kanten-CRUD, ** `POST …/edges/sequence` ** (Reihe auf einmal), ** `POST …/edges/delete-batch` **.
- AuthZ wie Trainingsvorlagen: Admin/Superadmin oder Graph‑ Ersteller; Anlegen mit Trainings-/Planungsrolle (`_has_planning_role`).
- Listenresponses mit Übungstiteln und Variantennamen (JOIN).
---
## 3. Backend – Übungen (`routers/exercises.py`)
### 3.1 Liste & Suche
2026-04-28 16:18:25 +02:00
- `GET /api/exercises` mit Filtern u. a.: Fokus, Stilrichtung, Trainingsstil, Zielgruppe, Fähigkeiten, **Skill-Stufe min/max** , `visibility_any` , `status_any` , `search` , ** `ai_search` ** (Platzhalter, derzeit gleiche Volltextlogik wie `search` ).
- Optional: ** `include_variants=true` ** — liefert pro Übung ein kompaktes ** `variants` **-JSON (id, variant_name, sequence_order) für Planung/UI.
2026-05-05 08:30:48 +02:00
### 3.2 Übungsvarianten (CRUD)
2026-04-28 16:18:25 +02:00
Implementiert gemäß ** `EXERCISES_API_SPEC.md` ** (Varianten-Abschnitt):
- `POST /api/exercises/{id}/variants`
- `PUT /api/exercises/{id}/variants/{variant_id}`
- `DELETE /api/exercises/{id}/variants/{variant_id}` (409, wenn andere Varianten diese als Voraussetzung nutzen)
- `PUT /api/exercises/{id}/variants/reorder` — `sequence_order` 1…n
Sortierung der Varianten im Detail: ** `sequence_order` **, dann ** `progression_level` **, dann ** `id` **.
2026-05-05 08:30:48 +02:00
### 3.3 Medien-Upload – Größenlimits
2026-04-28 16:18:25 +02:00
- Standard: **50 MB** pro Datei (`EXERCISE_MEDIA_MAX_UPLOAD_MB`, Default 50).
- **`admin`** / ** `superadmin` **: **1024 MB** Default (`EXERCISE_MEDIA_ADMIN_MAX_UPLOAD_MB`), nie unter dem Nutzer-Limit (in MB verglichen).
Logik: `_upload_limit_bytes(session)` vor `read()` -Prüfung.
---
2026-05-05 08:30:48 +02:00
## 4. Backend – Trainingsplanung (`routers/training_planning.py`)
2026-04-28 16:18:25 +02:00
- `training_unit_exercises` : Schreiben/Lesen von ** `exercise_variant_id` **.
- Validierung: Variante muss zur gewählten ** `exercise_id` ** gehören.
- JOIN liefert u. a. ** `exercise_variant_name` ** beim Lesen einer Einheit.
---
2026-05-05 08:30:48 +02:00
## 5. Frontend – Übungsliste (`ExercisesListPage.jsx`)
2026-04-28 16:18:25 +02:00
2026-05-05 08:30:48 +02:00
- Tabs **Liste** · **Progressionsgraphen** (`ExerciseProgressionGraphPanel`): Graphen anlegen/bearbeiten, Kanten inkl. Sequenz-Bulk und Tabellenansicht.
2026-04-28 16:18:25 +02:00
- **Filter-Modal** (Fokus, Stilrichtung, Trainingsstil, Zielgruppe, Fähigkeit + Stufen von/bis, Sichtbarkeit, Status).
- **Filter-Chips** unter der Suchleiste; Klick entfernt einen Filter; Badge am Filter-Button = Anzahl Chips.
- **Kein Vollbild-Spinner** bei jeder Suche: nur noch ** `listFetching` ** — Suchfelder bleiben im DOM (**Fokus/Cursor** bleiben erhalten); Liste zeigt optional „Aktualisiere Treffer…“.
- **`< datalist > `** mit Titeln der aktuellen Treffer; ** `autoComplete="on"` ** für Browser-Vorschläge.
- **`api.listExercises`**: Booleans (z. B. `include_variants` ) werden als Query übergeben.
---
2026-05-05 08:30:48 +02:00
## 6. Frontend – Übung bearbeiten (`ExerciseFormPage.jsx`)
2026-04-28 16:18:25 +02:00
- **Varianten-Editor**: eingeklappter Bereich (`< details > `), **eine Variante zur Zeit** über Dropdown oder „Neue Variante“; Felder über ** `ExerciseVariantFields` **; Reihenfolge Nach oben/unten; Speichern/Löschen pro Variante.
- **Medien** wie zuvor (Formularteil).
2026-05-05 08:30:48 +02:00
- Block **Progressionsgraph** (Edit): Kanten mit Bezug zur aktuellen Übung.
2026-04-28 16:18:25 +02:00
Hinweis: Es gibt **keine** separaten Routen `/exercises/:id/variants/...` — Bearbeitung erfolgt unter ** `/exercises/:id/edit` ** (Routing-Doku ggf. anpassen).
---
2026-05-05 08:30:48 +02:00
## 7. Frontend – Übung Detail (`ExerciseDetailPage.jsx`)
2026-04-28 16:18:25 +02:00
- Varianten-Abschnitt mit **Meta** (Dauer, Schwierigkeit, Material, Progressionsstufe) wo vorhanden.
---
2026-05-05 08:30:48 +02:00
## 8. Frontend – Trainingsplanung (`TrainingPlanningPage.jsx`)
2026-04-28 16:18:25 +02:00
- `listExercises({ include_variants: true })` .
- Pro Zeile: Übung + **Variante** (optional), Dauer, Reihenfolge.
---
2026-05-05 08:30:48 +02:00
## 9. Rich-Text (`RichTextEditor.jsx` + CSS)
2026-04-28 16:18:25 +02:00
- **Selection Save/Restore** vor Toolbar-Klicks (`insertUnorderedList` / `insertOrderedList` zuverlässiger bei Mehrzeilen-Markierung).
- **`styleWithCSS` false** vor Formatbefehlen.
- **Listen-Styling** für `.rich-text-editor ul/ol/li` (Einzüge sichtbar).
---
2026-05-05 08:30:48 +02:00
## 10. Admin – Matrix / Reifegrad (Kontext)
2026-04-28 16:18:25 +02:00
- Bereits dokumentiert in ** `CHANGELOG` ** / Module ** `maturity_models` **: Matrix-Stack-Bundle Export/Import, Kontext-Bindings — siehe `version.py` und Admin-UI-Pfade.
---
2026-05-05 08:30:48 +02:00
## 11. Nächste sinnvolle Schritte (nicht Lieferstand)
2026-04-28 16:18:25 +02:00
2026-05-05 08:30:48 +02:00
- Trainingsplanungs-/Rahmenmodul (**CURR‑ 002 (2)**) — Progressionsgraph ist unterstützend, siehe ** `TRAINING_FRAMEWORK_SPEC.md` ** §4.
2026-04-28 16:18:25 +02:00
- Progressions-Serien als **Blöcke** (angekündigt; Voraussetzung: `prerequisite_variant_id` / `progression_level` vorhanden).
- Serverseitige **Suchvorschläge** (Autocomplete-Endpoint), falls datalist nicht reicht.
- Optional: Streaming/chunked Upload für sehr große Videos (RAM-Thema).
---
2026-05-05 08:30:48 +02:00
## 12. Verweise
2026-04-28 16:18:25 +02:00
| Thema | Dokument |
|--------|----------|
2026-05-05 08:30:48 +02:00
| Rahmenprogramm / Progressionsgraph | `technical/TRAINING_FRAMEWORK_SPEC.md` |
2026-04-28 16:18:25 +02:00
| API Übungen | `technical/EXERCISES_API_SPEC.md` |
| Domänenmodell | `functional/DOMAIN_MODEL.md` |
| Datenbank Überblick | `technical/DATABASE_SCHEMA.md` |
| Upload formal | `technical/MEDIA_UPLOAD_SPEC.md` |
| Projektstatus-Kachel | `../PROJECT_STATUS.md` |