- Updated CLAUDE.md to reflect the addition of exercise_progression_graphs in the backend routers. - Revised PROJECT_STATUS.md to document the current project status and recent milestones, including the implementation of the exercise progression graph feature. - Incremented versioning in DOMAIN_MODEL.md and DATABASE_SCHEMA.md to align with the latest migration updates. - Enhanced technical specifications in TRAINING_FRAMEWORK_SPEC.md to clarify the implementation details of the exercise progression graph and its integration with the training framework.
6.2 KiB
Gelieferte Features & technische Basis (April 2026)
Stand: 2026-04-30
Referenz: backend/version.py — APP_VERSION 0.8.7, DB_SCHEMA_VERSION 20260430034
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/.
1. Datenbank-Migrationen (Auswahl)
| Migration | Inhalt |
|---|---|
| 032–034 | Progressionsgraph Übung→Übung: Container exercise_progression_graphs, Kanten exercise_progression_edges; notes (033); optionale Varianten-Endpunkte + Constraints (034) |
| 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 |
2. Backend – Progressionsgraphen (routers/exercise_progression_graphs.py)
- REST unter
/api/exercise-progression-graphsinkl. 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
GET /api/exercisesmit Filtern u. a.: Fokus, Stilrichtung, Trainingsstil, Zielgruppe, Fähigkeiten, Skill-Stufe min/max,visibility_any,status_any,search,ai_search(Platzhalter, derzeit gleiche Volltextlogik wiesearch).- Optional:
include_variants=true— liefert pro Übung ein kompaktesvariants-JSON (id, variant_name, sequence_order) für Planung/UI.
3.2 Übungsvarianten (CRUD)
Implementiert gemäß EXERCISES_API_SPEC.md (Varianten-Abschnitt):
POST /api/exercises/{id}/variantsPUT /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_order1…n
Sortierung der Varianten im Detail: sequence_order, dann progression_level, dann id.
3.3 Medien-Upload – Größenlimits
- 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.
4. Backend – Trainingsplanung (routers/training_planning.py)
training_unit_exercises: Schreiben/Lesen vonexercise_variant_id.- Validierung: Variante muss zur gewählten
exercise_idgehören. - JOIN liefert u. a.
exercise_variant_namebeim Lesen einer Einheit.
5. Frontend – Übungsliste (ExercisesListPage.jsx)
- Tabs Liste · Progressionsgraphen (
ExerciseProgressionGraphPanel): Graphen anlegen/bearbeiten, Kanten inkl. Sequenz-Bulk und Tabellenansicht. - 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.
6. Frontend – Übung bearbeiten (ExerciseFormPage.jsx)
- Varianten-Editor: eingeklappter Bereich (
<details>), eine Variante zur Zeit über Dropdown oder „Neue Variante“; Felder überExerciseVariantFields; Reihenfolge Nach oben/unten; Speichern/Löschen pro Variante. - Medien wie zuvor (Formularteil).
- Block Progressionsgraph (Edit): Kanten mit Bezug zur aktuellen Übung.
Hinweis: Es gibt keine separaten Routen /exercises/:id/variants/... — Bearbeitung erfolgt unter /exercises/:id/edit (Routing-Doku ggf. anpassen).
7. Frontend – Übung Detail (ExerciseDetailPage.jsx)
- Varianten-Abschnitt mit Meta (Dauer, Schwierigkeit, Material, Progressionsstufe) wo vorhanden.
8. Frontend – Trainingsplanung (TrainingPlanningPage.jsx)
listExercises({ include_variants: true }).- Pro Zeile: Übung + Variante (optional), Dauer, Reihenfolge.
9. Rich-Text (RichTextEditor.jsx + CSS)
- Selection Save/Restore vor Toolbar-Klicks (
insertUnorderedList/insertOrderedListzuverlässiger bei Mehrzeilen-Markierung). styleWithCSSfalse vor Formatbefehlen.- Listen-Styling für
.rich-text-editor ul/ol/li(Einzüge sichtbar).
10. Admin – Matrix / Reifegrad (Kontext)
- Bereits dokumentiert in
CHANGELOG/ Modulematurity_models: Matrix-Stack-Bundle Export/Import, Kontext-Bindings — sieheversion.pyund Admin-UI-Pfade.
11. Nächste sinnvolle Schritte (nicht Lieferstand)
- Trainingsplanungs-/Rahmenmodul (CURR‑002 (2)) — Progressionsgraph ist unterstützend, siehe
TRAINING_FRAMEWORK_SPEC.md§4. - Progressions-Serien als Blöcke (angekündigt; Voraussetzung:
prerequisite_variant_id/progression_levelvorhanden). - Serverseitige Suchvorschläge (Autocomplete-Endpoint), falls datalist nicht reicht.
- Optional: Streaming/chunked Upload für sehr große Videos (RAM-Thema).
12. Verweise
| Thema | Dokument |
|---|---|
| Rahmenprogramm / Progressionsgraph | technical/TRAINING_FRAMEWORK_SPEC.md |
| 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 |