Files
WrestleDesk/docs/superpowers/specs/2026-03-24-leistungstest-ergebnisse-design.md
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

92 lines
2.3 KiB
Markdown
Raw Permalink 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.
# 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