Files
WrestleDesk/docs/superpowers/specs/2026-03-22-homework-redesign-design.md
T
Andrej Spielmann 3fefc550fe Initial commit: WrestleDesk full project
- Django backend with DRF (clubs, wrestlers, trainers, exercises, templates, trainings, homework, locations, leistungstest)
- Next.js 16 frontend with React, Shadcn UI, Tailwind
- JWT authentication
- Full CRUD for all entities
- Calendar view for trainings
- Homework management system
- Leistungstest tracking
2026-03-26 13:24:57 +01:00

15 KiB

Homework System Redesign - Spezifikation

Überblick

Komplette Neugestaltung des Homework-Systems ohne Vorlagen. Homework wird direkt von der Training-Seite aus Assignees zugewiesen.

Konzept

Workflow:

  1. Trainer ist auf Training-Detail-Seite
  2. Bei jedem Teilnehmer gibt es einen Homework-Button (Icon)
  3. Klick öffnet Modal: Exercises auswählen (mit reps/time)
  4. Homework wird dem Wrestler für dieses Training zugewiesen
  5. Auf der Homework-Seite sieht man alle Zuweisungen gruppiert nach Training

Keine Templates - Exercises werden direkt zugewiesen, keine wiederverwendbaren Vorlagen.


Datenmodell

Neues Model: TrainingHomework

Verknüpft ein Training mit Exercises.

Feld Typ Beschreibung
id AutoField Primary Key
training FK → Training Das Training
created_at DateTime Auto

Neues Model: TrainingHomeworkAssignment

Welcher Wrestler welche Homework eines Trainings bekommen hat.

Feld Typ Beschreibung
id AutoField Primary Key
training_homework FK → TrainingHomework Die Homework
wrestler FK → Wrestler Der Wrestler
club FK → Club Club (für Filter)
notes TextField Optionale Notizen
created_at DateTime Auto

Junction Table: TrainingHomeworkExercise

Feld Typ Beschreibung
id AutoField Primary Key
training_homework FK → TrainingHomework Die Homework
exercise FK → Exercise Die Übung
reps PositiveInteger Wiederholungen
time_minutes PositiveInteger Zeit in Minuten
order Integer Sortierung

API Endpoints

Backend

GET  /homework/training-assignments/     - Alle Zuweisungen für Club (gefiltert)
POST /homework/training-assignments/     - Neue Zuweisung erstellen
GET  /homework/training-assignments/{id}/ - Detail
PATCH /homework/training-assignments/{id}/ - Aktualisieren (notizen, etc.)
DELETE /homework/training-assignments/{id}/ - Löschen

POST /homework/training-assignments/{id}/complete/   - Als erledigt markieren
POST /homework/training-assignments/{id}/uncomplete/ - Als nicht erledigt markieren

Frontend Types

interface ITrainingHomework {
  id: number
  training: number
  training_date: string
  training_group: string
  exercises: ITrainingHomeworkExercise[]
  created_at: string
}

interface ITrainingHomeworkExercise {
  id: number
  exercise: number
  exercise_name: string
  exercise_category: string
  reps: number | null
  time_minutes: number | null
  order: number
}

interface ITrainingHomeworkAssignment {
  id: number
  training_homework: number
  training_homework_detail: ITrainingHomework
  wrestler: number
  wrestler_name: string
  wrestler_group: string
  is_completed: boolean
  completion_date: string | null
  notes: string
  created_at: string
}

UI: Training Detail Seite

Layout (oben nach unten)

┌─────────────────────────────────────────────────────────────┐
│ [← Zurück]  Training vom 22.03.2026          [Kinder Badge]│
├─────────────────────────────────────────────────────────────┤
│ Datum: Montag, 22. März 2026                                │
│ Zeit: 17:00 - 18:30                                         │
│ Ort: Sporthalle                                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────┐  ┌─────────────────────┐          │
│  │ TEILNEHMER (8)      │  │ TRAININGSHOMEWORK   │          │
│  │                     │  │                     │          │
│  │ ┌─────────────────┐ │  │ Hier kommen die     │          │
│  │ │ 🧒 Max M.    📚 │ │  │ Homework-Übungen    │          │
│  │ │    Club A       │ │  │ für dieses Training │          │
│  │ └─────────────────┘ │  │ rein wenn jemand    │          │
│  │ ┌─────────────────┐ │  │ Homework hat.       │          │
│  │ │ 🧒 Anna S.   📚 │ │  │                     │          │
│  │ │    Club B       │ │  │                     │          │
│  │ └─────────────────┘ │  │                     │          │
│  │                     │  │                     │          │
│  │ [+ Ringer hinzu]   │  │                     │          │
│  └─────────────────────┘  └─────────────────────┘          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Teilnehmer-Karte

  • Liste der Teilnehmer mit Avatar
  • Bei jedem Teilnehmer rechts:
    • Homework-Button (Buch-Icon) → öffnet Modal
    • X-Button → entfernen
  • "Ringer hinzufügen" Button unter der Liste

Homework-Button Modal

┌─────────────────────────────────────────────────────────────┐
│  📚 Hausaufgabe zuweisen - Max Mustermann                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Übungen auswählen:                                         │
│  ┌─────────────────────────────────────────────────────────┐│
│  │ [🔍] Übungen durchsuchen...                             ││
│  ├─────────────────────────────────────────────────────────┤│
│  │ ○ Liegestütze (Kraft)              [10] Reps           ││
│  │ ○ Sit-ups (Kraft)                  [30] Sek            ││
│  │ ○ Ausfallschritte (Technik)        [ ] Reps [60] Sek   ││
│  └─────────────────────────────────────────────────────────┘│
│                                                             │
│  Ausgewählte Übungen:                                        │
│  ┌─────────────────────────────────────────────────────────┐│
│  │ 1. Liegestütze - 10 Wiederholungen              [✕]   ││
│  │ 2. Sit-ups - 30 Sekunden                       [✕]   ││
│  └─────────────────────────────────────────────────────────┘│
│                                                             │
│  Notizen (optional):                                        │
│  ┌─────────────────────────────────────────────────────────┐│
│  │                                                          ││
│  └─────────────────────────────────────────────────────────┘│
│                                                             │
├─────────────────────────────────────────────────────────────┤
│                    [Abbrechen]  [Zuweisen]                 │
└─────────────────────────────────────────────────────────────┘

UI: Hausaufgaben Seite

Layout

┌─────────────────────────────────────────────────────────────┐
│  📚 Hausaufgaben                                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Filter: [Alle] [Offen] [Erledigt]    [🔍 Suche...]        │
│                                                             │
│  Training: 22.03.2026 (Kinder)                              │
│  ┌─────────────────────────────────────────────────────────┐│
│  │ ┌─────────────────────────────────────────────────────┐ ││
│  │ │ 🧒 Max Mustermann                    [Erledigt ✓]  │ ││
│  │ │    Liegestütze (10), Sit-ups (30s), ...            │ ││
│  │ │    Zugewiesen: vor 2 Tagen                         │ ││
│  │ └─────────────────────────────────────────────────────┘ ││
│  │ ┌─────────────────────────────────────────────────────┐ ││
│  │ │ 🧒 Anna Schmidt                       [Offen]       │ ││
│  │ │    Liegestütze (10), Sit-ups (30s), ...            │ ││
│  │ │    Zugewiesen: vor 2 Tagen                         │ ││
│  │ └─────────────────────────────────────────────────────┘ ││
│  └─────────────────────────────────────────────────────────┘│
│                                                             │
│  Training: 20.03.2026 (Jugend)                              │
│  ...                                                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Assignment Card

  • Wrestler Name + Avatar
  • Status Badge: "Offen" (orange) oder "Erledigt" (grün)
  • Liste der Exercises mit reps/time
  • "Erledigt" Button zum Markieren
  • Click auf Card → expandiert Details

UI: Dashboard

Zeigt offene Homework-Anzahl:

┌─────────────────────────────────────────────────────────────┐
│  📊 Dashboard                                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐   │
│  │ 🧒 24    │  │ 👨‍🏫 8     │  │ 📅 12    │  │ 📚 5     │   │
│  │ Ringer   │  │ Trainer  │  │ Training │  │ Offene   │   │
│  │          │  │          │  │ diese Wo │  │ Homework│   │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Farben & Styling

  • Status "Offen": bg-warning/10 text-warning
  • Status "Erledigt": bg-success/10 text-success
  • Homework Icon: BookOpen von Lucide

Technische Umsetzung

Backend

  1. Neue Models in backend/homework/models.py:

    • TrainingHomework
    • TrainingHomeworkExercise (Junction)
    • TrainingHomeworkAssignment
  2. Serializers in backend/homework/serializers.py:

    • TrainingHomeworkSerializer
    • TrainingHomeworkExerciseSerializer
    • TrainingHomeworkAssignmentSerializer
  3. Views in backend/homework/views.py:

    • TrainingHomeworkAssignmentViewSet mit /training-assignments/ endpoint
    • complete und uncomplete actions
  4. URLs in backend/homework/urls.py:

    • training-assignments/ routes
  5. Admin in backend/homework/admin.py:

    • Neue Models registrieren

Frontend

  1. Types in frontend/src/lib/api.ts:

    • ITrainingHomework
    • ITrainingHomeworkExercise
    • ITrainingHomeworkAssignment
  2. Training Detail Page frontend/src/app/(dashboard)/trainings/[id]/page.tsx:

    • Layout: Details oben, dann 2-Spalten (Teilnehmer | TrainingHomework)
    • Teilnehmer-Karte mit Homework-Button
    • Modal für Homework-Zuweisung
  3. Homework Page frontend/src/app/(dashboard)/homework/page.tsx:

    • Komplett neu schreiben
    • Gruppiert nach Training
    • Status-Filter
    • Erledigt/Undone togglen
  4. Dashboard frontend/src/app/(dashboard)/dashboard/page.tsx:

    • Homework-Count hinzufügen

Zu löschende alte Components

  • Alte Homework, HomeworkExerciseItem, HomeworkAssignment, HomeworkAssignmentItem, HomeworkStatus Models optional behalten (für Migration) aber nicht mehr nutzen
  • Alte Frontend-Homework-Logik entfernen