- Incremented application version to 0.7.9 and updated database schema version to 20260427030. - Revised project status documentation to reflect recent milestones and changes, including detailed logs of implemented features and next steps. - Enhanced API specifications for exercises, including support for exercise variants and improved query parameters. - Updated frontend routing to streamline exercise variant management within the ExerciseFormPage. - Implemented role-based media upload limits and refined search/filter specifications for better user experience.
5.1 KiB
5.1 KiB
Gelieferte Features & technische Basis (April 2026)
Stand: 2026-04-27
Referenz: backend/version.py — APP_VERSION 0.7.9, DB_SCHEMA_VERSION 20260427030
Dieses Dokument bündelt die in der Entwicklungsphase erreichten lieferbaren Funktionen und die zugehörigen technischen Artefakte. Detail-Spezifikationen bleiben in den verlinkten Pfaden unter .claude/docs/technical/ und .claude/docs/functional/.
1. Datenbank-Migrationen (Auswahl)
| Migration | Inhalt |
|---|---|
| 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 – Übungen (routers/exercises.py)
2.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.
2.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.
2.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.
3. 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.
4. Frontend – Übungsliste (ExercisesListPage.jsx)
- 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.
5. 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).
Hinweis: Es gibt keine separaten Routen /exercises/:id/variants/... — Bearbeitung erfolgt unter /exercises/:id/edit (Routing-Doku ggf. anpassen).
6. Frontend – Übung Detail (ExerciseDetailPage.jsx)
- Varianten-Abschnitt mit Meta (Dauer, Schwierigkeit, Material, Progressionsstufe) wo vorhanden.
7. Frontend – Trainingsplanung (TrainingPlanningPage.jsx)
listExercises({ include_variants: true }).- Pro Zeile: Übung + Variante (optional), Dauer, Reihenfolge.
8. 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).
9. Admin – Matrix / Reifegrad (Kontext)
- Bereits dokumentiert in
CHANGELOG/ Modulematurity_models: Matrix-Stack-Bundle Export/Import, Kontext-Bindings — sieheversion.pyund Admin-UI-Pfade.
10. Nächste sinnvolle Schritte (nicht Lieferstand)
- 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).
11. Verweise
| Thema | Dokument |
|---|---|
| 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 |