shinkan-jinkendo/.claude/docs/library/FEATURES_DELIVERED_2026-Q2.md
Lars 7134fd1a25
Some checks failed
Deploy Development / deploy (push) Successful in 35s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 5s
Test Suite / playwright-tests (push) Failing after 1m54s
feat: update version to 0.7.9 and enhance project documentation
- 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.
2026-04-28 16:18:25 +02:00

5.1 KiB
Raw Blame History

Gelieferte Features & technische Basis (April 2026)

Stand: 2026-04-27
Referenz: backend/version.pyAPP_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 (basisoptimierung), 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/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.

2.2 Übungsvarianten (CRUD)

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/reordersequence_order 1…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 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.

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 über ExerciseVariantFields; 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 / insertOrderedList zuverlässiger bei Mehrzeilen-Markierung).
  • styleWithCSS false vor Formatbefehlen.
  • Listen-Styling für .rich-text-editor ul/ol/li (Einzüge sichtbar).

9. Admin Matrix / Reifegrad (Kontext)

  • Bereits dokumentiert in CHANGELOG / Module maturity_models: Matrix-Stack-Bundle Export/Import, Kontext-Bindings — siehe version.py und Admin-UI-Pfade.

10. Nächste sinnvolle Schritte (nicht Lieferstand)

  • 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).

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