e8b7e62832
feat: add skill main categories and enhance skills catalog functionality
...
Deploy Development / deploy (push) Successful in 48s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 5s
Test Suite / playwright-tests (push) Failing after 1m57s
- Introduced endpoints for managing skill main categories, including CRUD operations.
- Enhanced skills catalog endpoint to support hierarchical sorting by main category and category.
- Updated frontend API utility functions to include new skill main category operations.
- Improved admin interface for skills management with new layout and styles.
- Documented changes in the changelog for better tracking of new features and updates.
2026-04-27 11:53:25 +02:00
7314ae1436
feat: Hierarchical Admin UI - Tree View for Catalogs
...
Deploy Development / deploy (push) Successful in 1m2s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 7s
Test Suite / playwright-tests (push) Failing after 1m56s
Backend:
- New endpoint: GET /api/admin/hierarchy
- Returns hierarchical structure: Focus Areas with nested Style Directions + Training Types
- Style Directions include target_groups assignments (M:N)
- JSON aggregation for efficient data loading
Frontend:
- New page: AdminHierarchyPage.jsx with Tree + Detail Panel layout
- Tree View: Expandable/collapsible nodes (Focus Areas → Stilrichtungen/Trainingstypen)
- Detail Panel: Shows selected item details, inline editing
- Visual hierarchy: Icons, indentation, color coding
- Responsive layout: Fixed 400px tree, fluid detail panel
Routes:
- /admin now redirects to /admin/hierarchy (new default)
- /admin/hierarchy: Tree-based catalog management
- /admin/catalogs: Legacy flat UI (still available)
UX Improvements:
- Visual hierarchy instead of flat tabs
- M:N relationships visible (target groups per style)
- Better navigation: Click to select, expand/collapse sections
- Cleaner layout: Two-column design
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-04-24 07:51:40 +02:00
fe5d29e40e
feat: Training Types → Focus Area Hierarchie
...
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 1m55s
Migration 013:
- Adds focus_area_id to training_types (context-specific types)
- Migrates existing data to Karate focus area
- Seeds focus-area-specific training types:
* Karate: Dan-Vorbereitung
* Gewaltschutz: Präventivkurse, Intensivtraining, Spezialkurse
* Fitness: Gesundheitssport, Funktionelles Training
- Updates unique constraint to (name, focus_area_id)
Backend (catalogs.py):
- list_training_types: Added focus_area_id filter, LEFT JOIN focus_areas
- create_training_type: Added focus_area_id parameter
- update_training_type: Added focus_area_id parameter
- Enriched responses with focus_area_name and focus_area_icon
Frontend (AdminCatalogsPage):
- Added Fokusbereich dropdown to create form
- Added Fokusbereich dropdown to edit form
- Display shows focus_area_icon and focus_area_name
- Training types now context-specific to focus areas
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-04-23 15:29:23 +02:00
9f44cff77b
fix: Stilrichtungen → Fokusbereich Zuordnung (focus_area_id)
...
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
Problem: Stilrichtungen-Tab zeigte falsches Feld 'Übergeordneter Stil' (parent_style_id)
Lösung: Fokusbereich-Dropdown (focus_area_id) für Hierarchie
Backend (catalogs.py):
- INSERT: focus_area_id Parameter hinzugefügt
- UPDATE: focus_area_id Parameter hinzugefügt
- SELECT: LEFT JOIN focus_areas für focus_area_name + icon
- Response enriched mit focus_area_name/icon
Frontend (AdminCatalogsPage.jsx):
- newTS State: parent_style_id → focus_area_id
- Create Form: Fokusbereich-Dropdown statt 'Übergeordneter Stil'
- Edit Form: Fokusbereich-Dropdown mit focusAreas
- Display: Zeigt Fokusbereich-Icon + Name (accent color)
- parent_style_id bleibt für optionale Stil-Hierarchien
Jetzt kann Hierarchie korrekt angelegt werden:
✅ Karate → Goju-Ryu
✅ Karate → Shotokan
✅ Gewaltschutz → (eigene Stilrichtungen)
version: 0.5.0
module: catalogs 1.5.0, AdminCatalogsPage 2.2.0
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-04-23 14:36:02 +02:00
5e2820c63c
feat: Trainer-Kontext-System & Exercise Training Characters (v0.5.0)
...
Deploy Development / deploy (push) Successful in 33s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 5s
Test Suite / playwright-tests (push) Failing after 1m55s
Migration 012:
- exercise_training_characters (M:N junction table)
- trainer_contexts (Fokussierte Trainer-Ansichten)
- Indizes für Performance
- Example seed data
Backend (catalogs.py):
- GET /api/trainer-contexts (list own contexts)
- POST /api/trainer-contexts (create context)
- PUT /api/trainer-contexts/{id} (update own context)
- DELETE /api/trainer-contexts/{id} (delete own context)
- Enriched responses mit focus_area_name, style_direction_name, training_type_name
- Ownership-Validation (nur eigene Kontexte)
Frontend:
- TrainerContextsPage.jsx (vollständige CRUD-UI)
- Kaskadierende Dropdowns (Fokusbereich → Stilrichtung)
- is_style_independent Flag für stilunabhängige Kontexte
- api.js erweitert (listTrainerContexts, create, update, delete)
Architektur:
- Flat Catalogs mit M:N überall
- NULL = 'für alles geeignet'
- Trainer-Kontexte für fokussierte Ansichten
- Vorbereitung für 1000+ Übungen mit flexibler KI-Filterung
version: 0.5.0 (backend + frontend)
module: exercises 0.5.0, catalogs 1.5.0
page: TrainerContextsPage 1.0.0
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-04-23 14:22:17 +02:00
155c21f018
fix: Backend SQL Queries für renamed tables (Migration 010+011)
...
- Updated all SQL queries in catalogs.py to use renamed tables:
- training_styles → style_directions
- training_style_target_groups → style_direction_target_groups
- exercise_styles → exercise_style_directions
- Updated API parameter names: training_style_id → style_direction_id
- Updated response field names: training_style_name → style_direction_name
- Updated array field names: training_styles → style_directions
- Fixes 'failed to fetch' errors on Stilrichtungen, Hierarchie, Zuordnungen tabs
version: 0.4.0 (backend)
module: catalogs 1.4.0
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-04-23 12:24:50 +02:00
72c927e69e
feat: Backend API für training_types + Frontend api.js
...
Deploy Development / deploy (push) Successful in 37s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 6s
Test Suite / playwright-tests (push) Failing after 1m55s
Backend (catalogs.py):
- GET /api/training-types (Liste)
- POST /api/training-types (Erstellen)
- PUT /api/training-types/{id} (Bearbeiten)
- DELETE /api/training-types/{id} (Löschen mit CASCADE-Check)
- Cascade-Protection: Fehler wenn Übungen zugeordnet
Frontend (api.js):
- listTrainingTypes(filters)
- createTrainingType(data)
- updateTrainingType(id, data)
- deleteTrainingType(id)
- Export zum api-Objekt hinzugefügt
Pattern: Konsistent mit anderen Katalog-Endpoints
CRUD: Volle Admin-Verwaltung
Version: 0.4.0
2026-04-23 12:12:48 +02:00
1e5e18c0b3
feat: Migration 009 - Zielgruppen M:N Refactoring
...
Deploy Development / deploy (push) Successful in 33s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 5s
Test Suite / playwright-tests (push) Failing after 1m57s
Backend Phase A (Database + API):
- Migration 009: target_groups.training_style_id entfernt
- Migration 009: Neue Junction-Tabelle training_style_target_groups
- Migration 009: Datenmigration alte → neue Struktur (idempotent)
- API: 5 neue Endpoints für M:N Management
* GET /training-style-target-groups (mit Enrichment)
* POST /training-style-target-groups (Upsert-Logik)
* PUT /training-style-target-groups/{id} (is_primary)
* DELETE /training-style-target-groups/{id}
* GET /training-styles/hierarchy (für Tree-View)
- API: GET/POST/PUT /target-groups jetzt global (ohne training_style_id)
- API: DELETE /target-groups prüft beide Tabellen (CASCADE-Schutz)
Architecture:
- Eine Zielgruppe kann mehreren Stilen zugeordnet werden
- Basis für Admin Tree-View + M:N Matrix UI
Version: 0.3.4
Module: catalogs 1.3.0
2026-04-23 10:37:56 +02:00
2a5f06a8f5
feat: Refactor target groups to M:N relationship and update related endpoints
Deploy Development / deploy (push) Successful in 36s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 5s
Test Suite / playwright-tests (push) Failing after 1m55s
2026-04-23 09:27:13 +02:00
278d719e84
feat: Zielgruppen-Verwaltung (Target Groups CRUD + Admin UI)
...
Deploy Development / deploy (push) Successful in 32s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 5s
Test Suite / playwright-tests (push) Failing after 1m54s
Backend:
- GET /api/target-groups: Liste mit hierarchischem Kontext (focus_area → training_style → target_group)
- POST /api/target-groups: Create (admin only)
- PUT /api/target-groups/{id}: Update (admin only)
- DELETE /api/target-groups/{id}: Delete (superadmin only) mit CASCADE-Schutz
- Filter: by training_style_id, status
Frontend:
- api.js: listTargetGroups, createTargetGroup, updateTargetGroup, deleteTargetGroup
- AdminCatalogsPage: Neuer Tab "Zielgruppen" (6. Tab)
- Create-Form: training_style_id, name, description, min_age, max_age
- List-View: Hierarchie-Anzeige (Fokusbereich → Stil → Zielgruppe + Altersbereich)
- Inline-Editing mit Stil-Auswahl-Dropdown
- Delete mit Confirmation Dialog
Architektur:
- Hierarchische Beziehung: target_groups.training_style_id → training_styles → focus_areas
- CASCADE-Protection: DELETE verweigert wenn exercise_target_groups Einträge existieren
- Backend liefert enriched data mit training_style_name + focus_area_name
version: 0.3.2
modules: catalogs 1.2.0
pages: AdminCatalogsPage 1.1.0
2026-04-23 08:55:54 +02:00
43c6abce4a
feat: Exercise Catalogs - Admin-verwaltbare Stammdaten (Backend)
...
Deploy Development / deploy (push) Successful in 35s
Test Suite / lint-backend (push) Successful in 1s
Test Suite / build-frontend (push) Successful in 5s
Test Suite / playwright-tests (push) Failing after 26s
Problem: Hard-codierte Werte (Fokusbereich, Trainingscharakter) + fehlende
Dimensionen (Stil, Fähigkeiten-Matrix) + keine Rollen-basierte Sichtbarkeit
Lösung: Dynamische Kataloge mit Admin-CRUD
Migration 007_exercise_catalogs.sql:
- focus_areas (statt hard-coded 'karate', 'selbstverteidigung', 'gewaltschutz')
- training_styles (NEU: Shotokan, Goju-Ryu, Wado-Ryu, etc. mit Hierarchie)
- training_characters (statt hard-coded 'grundlage', 'aufbau', etc.)
- skill_categories (Matrix: Kategorien → Einzelfähigkeiten)
- trainer_focus_areas (Zuordnung: Trainer → Fokusbereiche)
- exercises erweitert: training_style_id, training_character_id, focus_area_id
- skills erweitert: category_id, parent_skill_id, level, sort_order
- Seed-Daten für alle Kataloge
Backend (routers/catalogs.py):
- CRUD für focus_areas (admin only)
- CRUD für training_styles (admin only, mit parent_style_id)
- CRUD für training_characters (admin only)
- CRUD für skill_categories (admin only, mit parent_category_id)
- CRUD für trainer_focus_areas (admin: assign, trainer: read own)
- Alle mit status-Filter (active/inactive)
Backend (routers/exercises.py):
- CREATE/UPDATE erweitert um training_style_id, training_character_id, focus_area_id
- Legacy-Felder (focus_area text, training_character text) bleiben parallel
Backend (main.py):
- catalogs Router registriert
Nächster Schritt: Frontend-UI (Admin-Kataloge + Exercise-Formular-Update)
2026-04-22 22:06:11 +02:00