shinkan-jinkendo/.claude/docs/REVIEW_PROMPT_EXERCISES_SPECS.md
Lars 6801c60604
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 1m55s
feat: Add MediaWiki import functionality with tracking and mapping
- Implemented a new SQL migration for wiki import tracking tables.
- Created an import router for handling MediaWiki imports of exercises, skills, and methods.
- Developed a Semantic MediaWiki API client for direct API interactions.
- Added a mapper to convert SMW properties to local database fields.
- Introduced background tasks for asynchronous import processing.
- Implemented logging and error handling for import operations.
- Added endpoints for previewing imports, checking import status, and managing import references.
2026-04-24 14:41:52 +02:00

600 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Review Prompt: Exercises System Specifications
**Zweck:** Vollständiger Review der erstellten Spezifikationen gegen ursprüngliche Anforderungen und User-Ergänzungen
**Reviewer:** Plan Agent (oder anderer spezialisierter Agent)
**Status:** ✅ Review abgeschlossen + Fixes implementiert
**Datum:** 2026-04-24
**Review-Datum:** 2026-04-24
**Ergebnis:** APPROVED WITH CHANGES alle BLOCKER und MAJOR Issues behoben
---
## 1. Kontext & Auftrag
Du bist ein Plan Agent, der die erstellten Spezifikationen für das Exercise System in Shinkan Jinkendo reviewt. Deine Aufgabe ist es, die 7 Core-Specs gegen die ursprünglichen Anforderungen und User-Ergänzungen zu prüfen und sicherzustellen, dass **keine Anforderungen vergessen** wurden und **keine architektonischen Drifts** entstanden sind.
---
## 2. Zu reviewende Spezifikationen
### 2.1 Core Specs (Phase 0 Foundation)
**Lokation:** `c:/Dev/shinkan-jinkendo/.claude/docs/technical/`
1. **EXERCISES_ARCHITECTURE.md** (ca. 800 Zeilen)
- Architektur-Entscheidungen
- Exercise/Variant/Block/Series Definitionen
- Media-Strategie
- API-Konventionen
- DB-Konventionen
- Decision Log
2. **UI_COMPONENTS_SPEC.md** (ca. 600 Zeilen)
- Base Components (Chip, MultiSelect, Accordion, DragDropList)
- Exercise Components (Card, QuickInfo, VariantCard, MediaGallery, MediaUploader)
- Layout Patterns
- Responsive Breakpoints
- Accessibility
3. **EXERCISES_API_SPEC.md** (ca. 574 Zeilen)
- Alle Endpoints (Exercises, Variants, Media)
- Request/Response Beispiele
- Validierung Rules
- Error Format
- HTTP Status Codes
4. **EXERCISES_FRONTEND_ROUTING.md** (ca. 400 Zeilen)
- Route-Struktur
- Navigation Patterns
- State Management (URL, Local, Context)
- Deep Linking
- Navigation Guards
- Performance (Lazy Loading, Prefetching)
5. **MEDIA_UPLOAD_SPEC.md** (ca. 500 Zeilen)
- Hybrid Upload-Strategie (Lokal + Embeds)
- Upload-Flow (Client + Server)
- Embed-Parsing (YouTube, Vimeo, Instagram, TikTok)
- Media-Galerie
- Drag & Drop Reordering
- Security & Performance
6. **SEARCH_FILTER_SPEC.md** (ca. 450 Zeilen)
- Multi-Layer Search (Keyword, Katalog, Meta)
- Volltext-Suche (tsvector)
- Frontend Filter-UI
- Erweiterte Filter (Multi-Select, Range, Equipment)
- Faceted Search
- Saved Searches
- Sortierung
7. **EXERCISES_DATABASE_FINAL.md** (ca. 600 Zeilen)
- Migration 014 (Variant Progression + Search Vector)
- Migration 015 (Semantic Matching - Optional)
- Migration 016 (Saved Searches)
- Vollständige Tabellenstruktur
- Indizes
- Constraints & Business Rules
- Trigger-Funktionen
---
## 3. Ursprüngliche Anforderungen
### 3.1 User-Anforderungen (Initial Message)
**Quelle:** Erste User-Message in Session
**Kern-Anforderungen:**
1. **Formatierte Ausgabe:** Übungen mit Embedded Videos, Zeichnungen, optimiert für verschiedene Use Cases
2. **Varianten:** Mehrere Varianten mit progressiven Schwierigkeitsstufen
3. **Exercise Series:** Progression durch Varianten derselben Übung
4. **Exercise Blocks:** Sammlungen verschiedener Übungen
5. **Multi-dimensionale Kategorisierung:** Stil, Fokus, Zielgruppe, Fähigkeiten-Matrix mit Levels
6. **Trainingsplan-Integration:** Muss mit Trainingsplan-System integrieren
7. **MediaWiki-Import:** Direct API Integration (NICHT export-basiert)
8. **Robustheit:** Kein ständiger Drift, skalierbar, umfassend
**Spec-First Approach gewählt:** Alle Specs VOR Implementation
### 3.2 User-Ergänzungen (Follow-up)
**Quelle:** Zweite User-Message mit 5 Klarstellungen
**Präzisierungen:**
1. **Priorisierung OK:** Spec-First Ansatz bestätigt
2. **Web + Mobile Priorität (NICHT Print/PDF):**
- Kurze vs. detaillierte Beschreibungen für Trainingspläne
3. **Media-Strategie:** Lokaler Upload + YouTube/Instagram Embeds
4. **Exercise Series vs. Blocks Klarstellung:**
- **Series:** Progressive Varianten derselben Übung (via Variant-Metadata)
- **Blocks:** Gruppierung VERSCHIEDENER Übungen (neue Entity)
- **Template Blocks:** Blocks mit Platzhaltern (gefüllt beim Planen)
5. **MediaWiki Import:** Via Direct API (NICHT Export)
### 3.3 Referenz-Dokumente
**Quelle:** Zu lesende Dokumente vor Spec-Erstellung
1. **shinkan_anforderungsdokument_entwurf.md** (1425 Zeilen)
- Fachliche Anforderungen
- Reifegradmodelle
- Übungen & Methoden
- Trainingsplanung
- MVP Scope: Trainer-fokussiert
2. **DOMAIN_MODEL.md** (Version 0.3.4)
- Hierarchische Struktur: Fokusbereich → Stil → Zielgruppen (M:N)
- Primary/Secondary Pattern für M:N
- Migration 009 deployed (Zielgruppen M:N Refactoring)
3. **DATABASE_SCHEMA.md** (Version 0.3.4)
- Existierende M:N Tabellen
- Migrations 001-013 deployed
4. **backend/routers/exercises.py** (454 Zeilen)
- Existierendes CRUD
- Enrichment-Pattern für M:N Relations
- Filter-Support
5. **backend/migrations/005_exercises.sql**
- Base exercises table
- exercise_skills, exercise_variants, exercise_media
6. **backend/migrations/008_mn_exercise_relations.sql**
- M:N Migration (focus_areas, styles, target_groups, age_groups)
7. **frontend/src/pages/ExercisesPage.jsx** (609 Zeilen)
- Existierende UI (Grid, Filters, Modal)
- Limitation: Nutzt M:N Backend-Daten NICHT
---
## 4. Review-Kriterien
### 4.1 Vollständigkeit (Completeness)
**Prüfe gegen ursprüngliche Anforderungen:**
- [ ] **Formatierte Ausgabe:** Sind Embedded Videos, Zeichnungen, verschiedene Use Cases abgedeckt?
- [ ] **Varianten mit Progression:** Sind progressive Schwierigkeitsstufen spezifiziert?
- [ ] **Exercise Series:** Ist Progression durch Varianten klar definiert (OHNE separate Entity)?
- [ ] **Exercise Blocks:** Ist Gruppierung verschiedener Übungen spezifiziert?
- [ ] **Template Blocks:** Sind Platzhalter-Blocks für Planung definiert?
- [ ] **Multi-dimensionale Kategorisierung:** Sind Stil, Fokus, Zielgruppe, Skills mit Levels abgedeckt?
- [ ] **Trainingsplan-Integration:** Ist Integration mit Training Plan System spezifiziert?
- [ ] **MediaWiki-Import:** Ist Direct API Integration (NICHT Export) spezifiziert?
- [ ] **Kurz vs. Detail:** Sind verschiedene Beschreibungslängen für Trainingspläne definiert?
### 4.2 Konsistenz (Consistency)
**Prüfe gegen Referenz-Dokumente:**
- [ ] **DOMAIN_MODEL.md:** Folgen Specs der hierarchischen Struktur (Fokusbereich → Stil → Zielgruppen)?
- [ ] **M:N Pattern:** Wird `is_primary` Flag korrekt genutzt?
- [ ] **DATABASE_SCHEMA.md:** Bauen Migrationen 014-016 auf 001-013 auf?
- [ ] **Existierender Code:** Sind Specs kompatibel mit `backend/routers/exercises.py`?
- [ ] **Migration-Pattern:** Folgen neue Migrationen dem idempotenten DO $$ Pattern?
### 4.3 Architektonische Korrektheit (No Drift)
**Prüfe gegen User-Ergänzungen:**
- [ ] **Series vs. Blocks:** Ist die Unterscheidung klar und korrekt umgesetzt?
- Series = Progression durch Varianten (Metadata in `exercise_variants`)
- Blocks = Neue Entity für Gruppierung verschiedener Übungen
- [ ] **Media-Strategie:** Hybrid (Lokal + Embeds) korrekt spezifiziert?
- [ ] **Keine Cloud-Only Annahme:** Lokaler Upload vorhanden?
- [ ] **Direct API statt Export:** MediaWiki-Import via API spezifiziert?
### 4.4 Technische Machbarkeit (Feasibility)
- [ ] **Performance:** Sind Performance-Targets realistisch (<50ms List, <150ms Search)?
- [ ] **Skalierbarkeit:** DB-Schema skaliert auf 5.000+ Übungen?
- [ ] **Security:** File-Upload-Validierung mit python-magic (nicht nur Extension)?
- [ ] **UX:** Mobile-Optimierung (Filter-Drawer, Sticky Search, Bottom-Nav) vorhanden?
### 4.5 Gaps & Fehlende Features
**Prüfe auf vergessene Features:**
- [ ] **Trainingscharakter (M:N):** Ist `exercise_training_characters` spezifiziert?
- [ ] **Fähigkeiten-Levels:** Sind `required_level` und `target_level` in `exercise_skills` definiert?
- [ ] **Visibility-Workflow:** Ist `private → club → official` Status-Flow spezifiziert?
- [ ] **Permissions:** Sind Owner-Checks (nur Ersteller darf bearbeiten) definiert?
- [ ] **Pagination:** Ist Pagination in List-Endpoints spezifiziert?
- [ ] **Reordering:** Ist Drag & Drop Reordering für Variants + Media definiert?
---
## 5. Review-Prozess
### 5.1 Schritt-für-Schritt Anleitung
**Schritt 1: Dokumente lesen**
1. Lies alle 7 Core-Specs vollständig durch
2. Mache dir Notizen zu Auffälligkeiten
3. Markiere unklare oder widersprüchliche Stellen
**Schritt 2: Checkliste durchgehen**
1. Gehe durch Abschnitt 4.1 (Vollständigkeit) - jede Anforderung einzeln prüfen
2. Gehe durch Abschnitt 4.2 (Konsistenz) - gegen Referenz-Docs prüfen
3. Gehe durch Abschnitt 4.3 (Architektur) - gegen User-Ergänzungen prüfen
4. Gehe durch Abschnitt 4.4 (Machbarkeit) - technische Risiken bewerten
5. Gehe durch Abschnitt 4.5 (Gaps) - fehlende Features identifizieren
**Schritt 3: Cross-Check zwischen Specs**
1. ARCHITECTURE.md API_SPEC.md: Sind Decisions in API umgesetzt?
2. API_SPEC.md DATABASE_FINAL.md: Matchen Endpoints zur DB-Struktur?
3. UI_COMPONENTS_SPEC.md FRONTEND_ROUTING.md: Passen Komponenten zu Routes?
4. MEDIA_UPLOAD_SPEC.md DATABASE_FINAL.md: Passt `exercise_media` Tabelle?
5. SEARCH_FILTER_SPEC.md DATABASE_FINAL.md: Ist `search_vector` definiert?
**Schritt 4: Gap-Analyse**
1. Erstelle Liste aller **fehlenden** Anforderungen
2. Erstelle Liste aller **widersprüchlichen** Definitionen
3. Erstelle Liste aller **unklaren** Spezifikationen
4. Erstelle Liste aller **technischen Risiken**
**Schritt 5: Review-Report erstellen**
1. Folge Template in Abschnitt 6
2. Fülle alle Abschnitte vollständig aus
3. Sei konkret: Datei + Zeile + Problem + Lösungsvorschlag
---
## 6. Review-Report Template
**Nutze dieses Template für deinen Review-Report:**
```markdown
# Exercise System Specs - Review Report
**Reviewer:** [Dein Agent-Name]
**Review-Datum:** [Datum]
**Review-Dauer:** [ca. X Minuten]
**Gesamtbewertung:** [APPROVED / APPROVED WITH CHANGES / REJECTED]
---
## 1. Executive Summary
[2-3 Sätze: Sind die Specs bereit für Implementation? Größte Probleme?]
---
## 2. Vollständigkeit (Completeness)
### 2.1 Erfüllte Anforderungen ✅
- [x] Formatierte Ausgabe: Abgedeckt in MEDIA_UPLOAD_SPEC.md (Abschnitt 4)
- [x] Varianten mit Progression: Abgedeckt in EXERCISES_DATABASE_FINAL.md (Migration 014)
- [... weitere ...]
### 2.2 Fehlende Anforderungen ❌
| Anforderung | Wo fehlt es? | Kritikalität | Lösungsvorschlag |
|-------------|--------------|--------------|------------------|
| Exercise Blocks Entity | EXERCISES_ARCHITECTURE.md erwähnt, aber nicht in DATABASE_FINAL.md | HIGH | Migration 017 für `exercise_blocks` Tabelle hinzufügen |
| Template Blocks Platzhalter | Nirgendwo spezifiziert | MEDIUM | Erweitere `exercise_blocks` um `is_template` + `placeholders` JSONB |
| ... | ... | ... | ... |
---
## 3. Konsistenz (Consistency)
### 3.1 Inkonsistenzen zwischen Specs
| Problem | Betroffene Dateien | Impact | Fix |
|---------|-------------------|--------|-----|
| API_SPEC.md definiert `age_groups_catalog` als JSONB, aber DOMAIN_MODEL.md sagt M:N | API_SPEC.md Zeile 104, DOMAIN_MODEL.md Abschnitt 3 | MEDIUM | Entscheide: JSONB ODER M:N (empfohlen: M:N für Konsistenz) |
| ... | ... | ... | ... |
### 3.2 Inkonsistenzen mit Referenz-Dokumenten
| Problem | Spec-Datei | Referenz-Dokument | Fix |
|---------|-----------|-------------------|-----|
| DOMAIN_MODEL.md sagt Zielgruppen sind global (M:N), aber API_SPEC.md zeigt `target_group_id` als FK | API_SPEC.md Zeile 267 | DOMAIN_MODEL.md Abschnitt 3.3 | Korrigiere API_SPEC zu M:N Array |
| ... | ... | ... | ... |
---
## 4. Architektur-Drift
### 4.1 Abweichungen von User-Ergänzungen
| User-Anforderung | Spec-Umsetzung | Konform? | Problem / Fix |
|-----------------|----------------|----------|---------------|
| "Series = Varianten-Progression OHNE separate Entity" | EXERCISES_ARCHITECTURE.md Abschnitt 2.2 definiert Series korrekt als Metadata | ✅ JA | - |
| "Blocks = neue Entity für verschiedene Übungen" | EXERCISES_ARCHITECTURE.md erwähnt, DATABASE_FINAL.md fehlt Migration | ❌ NEIN | Migration 017 fehlt |
| "Direct API statt Export" | Nirgendwo spezifiziert | ❌ NEIN | Neue Spec MEDIAWIKI_IMPORT_SPEC.md nötig |
| ... | ... | ... | ... |
---
## 5. Technische Risiken
| Risiko | Betroffene Spec | Wahrscheinlichkeit | Impact | Mitigation |
|--------|----------------|-------------------|--------|------------|
| tsvector auf großen Texten langsam | SEARCH_FILTER_SPEC.md | MEDIUM | HIGH | Teste Performance mit 10.000 Zeichen Execution-Text |
| 50MB File-Upload blockiert Server | MEDIA_UPLOAD_SPEC.md | HIGH | MEDIUM | Chunk-Upload oder separater Upload-Worker |
| pgvector Extension nicht verfügbar | DATABASE_FINAL.md Migration 015 | LOW | LOW | Migration 015 ist optional (Phase 2) |
| ... | ... | ... | ... | ... |
---
## 6. Gap-Analyse
### 6.1 Komplett fehlende Features
1. **Exercise Blocks Implementation**
- Wo benötigt: DATABASE_FINAL.md, API_SPEC.md, UI_COMPONENTS_SPEC.md
- Kritikalität: HIGH (User-Anforderung #4)
- Aufwand: 1 Migration + 3 Endpoints + 2 Komponenten
2. **Template Blocks mit Platzhaltern**
- Wo benötigt: DATABASE_FINAL.md, API_SPEC.md
- Kritikalität: MEDIUM (User-Anforderung #4 Teil 2)
- Aufwand: Erweitere Blocks-Tabelle + 1 Endpoint
3. **MediaWiki Direct API Import**
- Wo benötigt: Neue Spec MEDIAWIKI_IMPORT_SPEC.md
- Kritikalität: HIGH (User-Anforderung #7)
- Aufwand: Neue Spec + Backend-Integration
4. [... weitere ...]
### 6.2 Unvollständig spezifizierte Features
1. **Trainingsplan-Integration**
- Status: Erwähnt in ARCHITECTURE.md, aber keine konkreten Endpoints
- Fehlende Details: Wie werden Übungen in Pläne eingefügt? API-Struktur?
- Fix: Erweitere API_SPEC.md um `/training-plans/{id}/exercises` Endpoints
2. [... weitere ...]
---
## 7. Kritische Findings (Must-Fix vor Implementation)
### 🔴 BLOCKER (Implementation NICHT starten ohne Fix)
1. **Exercise Blocks fehlen komplett**
- Impact: Kern-Anforderung #4 nicht erfüllt
- Fix: Migration 017 + API-Endpoints + UI-Komponenten spezifizieren
2. **MediaWiki-Import nicht spezifiziert**
- Impact: Kern-Anforderung #7 nicht erfüllt
- Fix: Neue Spec MEDIAWIKI_IMPORT_SPEC.md erstellen
### 🟠 MAJOR (Fix vor Phase 1 Abschluss)
1. **age_groups: JSONB vs. M:N Inkonsistenz**
- Impact: Daten-Modell unklar, spätere Migration schwierig
- Fix: Entscheide für M:N (Konsistenz) oder JSONB (Einfachheit)
2. [... weitere ...]
### 🟡 MINOR (Fix in Phase 2 akzeptabel)
1. **Semantic Matching (Migration 015) optional**
- Impact: Nice-to-have Feature, kein MVP-Blocker
- Fix: Kein Fix nötig, als Phase 2 markieren
2. [... weitere ...]
---
## 8. Empfehlungen
### 8.1 Vor Implementation starten
1. **Fixe alle BLOCKER:** Exercise Blocks + MediaWiki-Import spezifizieren
2. **Kläre MAJOR Issues:** age_groups Inkonsistenz auflösen
3. **Ergänze Extended Specs:** VARIANTS_PROGRESSION_SPEC.md, EXERCISE_BLOCKS_SPEC.md, PERMISSIONS_VISIBILITY_SPEC.md
4. **User-Review:** Zeige Specs dem User, hole Feedback zu Blocks/Template-Blocks
### 8.2 Implementation-Reihenfolge (falls APPROVED)
**Phase 1A - Foundation:**
1. Migration 014 (Search Vector + Variant Progression)
2. Migration 016 (Saved Searches)
3. Backend: GET/POST/PUT/DELETE `/exercises` + `/exercises/{id}/variants`
4. Frontend: ExercisesListPage + ExerciseDetailPage (ohne Blocks)
**Phase 1B - Media:**
1. Backend: `/exercises/{id}/media` Endpoints
2. Frontend: MediaUploader + MediaGallery Komponenten
**Phase 1C - Search:**
1. Backend: Search + Filter in GET `/exercises`
2. Frontend: SearchFilterBar Komponente
**Phase 2 - Blocks (nach BLOCKER-Fix):**
1. Migration 017 (Exercise Blocks)
2. Backend: `/exercise-blocks` Endpoints
3. Frontend: BlockEditor Komponente
**Phase 3 - Import:**
1. MEDIAWIKI_IMPORT_SPEC.md erstellen
2. Backend: MediaWiki API Connector
3. Frontend: Import-UI
---
## 9. Positive Findings ✅
[Was ist gut gelaufen? Was ist besonders gut spezifiziert?]
1. **Sehr detaillierte API-Spec:** Alle Request/Response-Beispiele vorhanden
2. **Konsistentes M:N Pattern:** is_primary Flag durchgängig genutzt
3. **Performance-bewusst:** Indizes, Caching, Lazy Loading spezifiziert
4. **Accessibility:** ARIA, Keyboard-Nav, Skip-Links definiert
5. [... weitere ...]
---
## 10. Nächste Schritte
### Für Spec-Autor (Original Agent):
1. [ ] Fixe BLOCKER #1: Exercise Blocks spezifizieren
2. [ ] Fixe BLOCKER #2: MediaWiki-Import spezifizieren
3. [ ] Kläre MAJOR Issue: age_groups JSONB vs. M:N
4. [ ] Aktualisiere betroffene Specs (siehe Abschnitt 7)
### Für User:
1. [ ] Lese Executive Summary + Kritische Findings
2. [ ] Entscheide über Blocks/Template-Blocks Umsetzung
3. [ ] Priorisiere MediaWiki-Import (jetzt oder später?)
4. [ ] Gib Feedback zu age_groups Entscheidung
### Für Implementation:
- **WARTE** bis alle BLOCKER gefixt sind
- **DANACH:** Starte mit Phase 1A (Foundation)
---
**Review abgeschlossen:** [Datum/Uhrzeit]
**Nächster Review:** [Nach BLOCKER-Fixes]
```
---
## 7. Wichtige Hinweise für Reviewer
### 7.1 Sei konkret
**SCHLECHT:** "Die API-Spec ist inkonsistent"
**GUT:** "API_SPEC.md Zeile 267 zeigt `target_group_id` als FK, aber DOMAIN_MODEL.md Abschnitt 3.3 definiert Zielgruppen als M:N"
### 7.2 Priorisiere nach Impact
- **BLOCKER:** Verhindert Implementation-Start
- **MAJOR:** Muss vor Phase 1 Abschluss gefixt werden
- **MINOR:** Kann in Phase 2 gefixt werden
### 7.3 Schlage Lösungen vor
Nicht nur Probleme nennen, sondern auch:
- Konkrete Fix-Vorschläge
- Alternative Ansätze
- Trade-offs aufzeigen
### 7.4 Sei fair
- Lobe gute Spezifikationen
- Erkenne schwierige Trade-offs an
- Berücksichtige MVP-Scope (nicht alles muss perfekt sein)
---
## 8. Erfolgs-Kriterien für APPROVED
Specs sind **APPROVED**, wenn:
1. Alle User-Anforderungen (1-8) spezifiziert sind
2. Alle User-Ergänzungen (1-5) korrekt umgesetzt sind
3. Keine architektonischen Widersprüche existieren
4. Specs konsistent mit Referenz-Dokumenten sind
5. Keine BLOCKER-Issues offen sind
6. Technische Machbarkeit gegeben ist
7. Implementation-Reihenfolge klar definiert ist
Specs sind **APPROVED WITH CHANGES**, wenn:
- 1-2 MAJOR Issues existieren (aber klar, wie zu fixen)
- Mehrere MINOR Issues existieren
- Implementation kann starten, während Fixes parallel gemacht werden
Specs sind **REJECTED**, wenn:
- 3+ BLOCKER Issues existieren
- Fundamentale architektonische Probleme vorhanden
- Große Teile der Anforderungen fehlen
---
## 9. Beispiel-Review-Snippet
**So sollte ein gutes Review-Finding aussehen:**
```markdown
### 🔴 BLOCKER #1: Exercise Blocks fehlen in DB-Schema
**Problem:**
- EXERCISES_ARCHITECTURE.md Abschnitt 2.3 definiert Exercise Blocks als "Gruppierung verschiedener Übungen"
- EXERCISES_DATABASE_FINAL.md (Migration 014-016) enthält KEINE `exercise_blocks` Tabelle
- API_SPEC.md spezifiziert KEINE `/exercise-blocks` Endpoints
**Impact:**
- User-Anforderung #4 ("Exercise Blocks: Sammlungen verschiedener Übungen") NICHT erfüllt
- Trainingsplan-Integration (Anforderung #6) ohne Blocks schwierig
**Betroffene Dateien:**
- EXERCISES_DATABASE_FINAL.md (fehlt Migration 017)
- EXERCISES_API_SPEC.md (fehlt Abschnitt "Exercise Blocks")
- UI_COMPONENTS_SPEC.md (fehlt "BlockEditor" Komponente)
**Lösungsvorschlag:**
1. **Migration 017: Exercise Blocks**
```sql
CREATE TABLE exercise_blocks (
id SERIAL PRIMARY KEY,
name VARCHAR(200) NOT NULL,
description TEXT,
is_template BOOLEAN DEFAULT FALSE,
placeholders JSONB, -- für Template-Blocks
created_by INT REFERENCES profiles(id),
created_at TIMESTAMP DEFAULT NOW()
);
CREATE TABLE exercise_block_items (
id SERIAL PRIMARY KEY,
block_id INT REFERENCES exercise_blocks(id) ON DELETE CASCADE,
exercise_id INT REFERENCES exercises(id) ON DELETE CASCADE,
sequence_order INT NOT NULL,
notes TEXT,
UNIQUE(block_id, sequence_order)
);
```
2. **API-Endpoints ergänzen:**
- `GET /exercise-blocks` - List blocks
- `POST /exercise-blocks` - Create block
- `PUT /exercise-blocks/{id}` - Update block
- `POST /exercise-blocks/{id}/items` - Add exercise to block
- `PUT /exercise-blocks/{id}/items/reorder` - Reorder exercises
3. **UI-Komponente spezifizieren:**
- BlockEditor mit Drag & Drop für Exercise-Reihenfolge
- Template-Modus mit Platzhalter-UI
**Aufwand:** ~4-6h (1 Migration + 5 Endpoints + 1 Komponente spezifizieren)
**Kritikalität:** BLOCKER - Implementation kann ohne Blocks NICHT User-Anforderungen erfüllen
```
---
## 10. Review starten
**Bereit? Dann:**
1. Lies alle 7 Spec-Dokumente gründlich
2. Gehe die Checkliste durch (Abschnitt 4)
3. Erstelle deinen Review-Report (Template Abschnitt 6)
4. Sei konkret, fair und konstruktiv
5. Priorisiere nach Impact (BLOCKER > MAJOR > MINOR)
**Viel Erfolg beim Review! 🚀**
---
**Letzte Aktualisierung:** 2026-04-24
**Version:** 1.0
**Autor:** Claude Code (Spec-Ersteller)