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
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
# Leistungstest Ergebnisse — Neue Ansicht
|
||||
|
||||
## Overview
|
||||
|
||||
Der "ergebnisse" Tab im Leistungstest zeigt ab sofort Ergebnisse in einer modernen Karten-Ansicht mit Toggle-Option zwischen Karten und Tabelle.
|
||||
|
||||
## Design
|
||||
|
||||
### Karten-Ansicht (Default)
|
||||
- Pro Ergebnis eine übersichtliche Karte
|
||||
- Header: Ringer-Avatar (initialbasiert), Name, Datum, Vorlage
|
||||
- Header-Right: Score (%) in groß (farbcodiert: grün ≥100%, gelb ≥80%, rot <80%), Gesamtzeit
|
||||
- Body: Liste aller Übungen mit Soll/Reps, elapsed_seconds, Done-Check
|
||||
- Footer: Bewertung (Sterne), Bearbeiten/Löschen Buttons
|
||||
|
||||
### Toggle
|
||||
- Toggle-Button-Leiste oben rechts: "⊞ Tabelle" | "📋 Karten"
|
||||
- Aktive Ansicht ist hervorgehoben (weißer Hintergrund, Schatten)
|
||||
- Auswahl wird in User-Preferences gespeichert (optional, falls bereits Preferences-System existiert)
|
||||
|
||||
### Farbcodierung
|
||||
- Score ≥100%: Grün (`#16a34a`)
|
||||
- Score ≥80%: Gelb (`#ca8a04`)
|
||||
- Score <80%: Rot (`#dc2626`)
|
||||
|
||||
### Filter
|
||||
- Vorlage-Dropdown (alle Vorlagen oder spezifische)
|
||||
- Ringer-Dropdown (optional)
|
||||
- Sortierung: Neueste zuerst (default)
|
||||
|
||||
### Detail-Ansicht pro Ergebnis
|
||||
- Alle Übungen mit:
|
||||
- Übungsname
|
||||
- Soll: `targetReps` (z.B. "3×10")
|
||||
- Zeit: `elapsedSeconds` formatiert als `m:ss`
|
||||
- Status: ✓ wenn done
|
||||
|
||||
## Komponenten
|
||||
|
||||
### ResultsCardsView
|
||||
- Rendering aller Ergebnis-Karten
|
||||
- Filter-Logik
|
||||
- Toggle-State
|
||||
|
||||
### ResultCard
|
||||
- Einzelne Ergebniskarte
|
||||
- Avatar mit Initial des Ringers
|
||||
- Farbcodierter Score
|
||||
- Übungsliste mit Zeiten
|
||||
- Aktions-Buttons
|
||||
|
||||
## API
|
||||
|
||||
Ergebnisse werden via `apiFetch("/leistungstest/results/")` geladen (existierendes API).
|
||||
|
||||
Response-Shape:
|
||||
```typescript
|
||||
{
|
||||
id: number
|
||||
template: number
|
||||
template_name: string
|
||||
wrestler: number
|
||||
wrestler_name: string
|
||||
total_time_seconds: number
|
||||
rating: number
|
||||
score_percent: number
|
||||
completed_at: string
|
||||
items: Array<{
|
||||
id: number
|
||||
exercise: number
|
||||
exercise_name: string
|
||||
target_reps: number
|
||||
actual_reps: number
|
||||
elapsed_seconds: number
|
||||
order: number
|
||||
}>
|
||||
}
|
||||
```
|
||||
|
||||
## Backend
|
||||
|
||||
Keine Änderungen notwendig — bestehendes API wird verwendet.
|
||||
|
||||
## Implementierung
|
||||
|
||||
1. Neuer State `resultViewMode: "cards" | "table"` (default: "cards")
|
||||
2. `ResultsCardsView` Component mit Karten-Logic
|
||||
3. Toggle-Buttons im CardHeader
|
||||
4. Ergebnis-Karten mit allen Details
|
||||
5. Filter funktionieren wie bisher
|
||||
6. Pagination bleibt bestehen
|
||||
Reference in New Issue
Block a user