Files
geograsim/STATUS-2026-05-18-V2-COCKPIT.md
Adminator 1e51ef7def Nachtrag: alle bisher untracked Ordner + hängende Änderungen mit-committen
- Konzept/, didaktik_geografie/, didaktik_simulation/, v2-modules/, v2-platform/
- 12 code-workspace-Files
- STATUS-*.md
- viele M/D/R-Änderungen an bereits getrackten Files
- .gitignore verstärkt: **/.humaninput/, **/secret_keys.txt

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-08 02:27:02 +02:00

91 lines
4.6 KiB
Markdown

# V2-Cockpit + Login — 2026-05-18
Großer Brocken durch. V2 ist jetzt eine **vollständige Mini-Anwendung**
mit Login, Schüler-Cockpit, Lehrperson-Cockpit, Admin-Config — und der
ganzen API-Schicht dahinter.
## Was du jetzt hast
### Login
- [v2-platform/login.html](v2-platform/login.html) — Login mit Tab-Wechsel Lehrperson / Schüler*in
- JWT-Token wird in localStorage gespeichert (Key `ggs_v2_session`)
- Bei Token-Ablauf: Auto-Redirect zur Login-Seite
- [auth-client.js](v2-platform/assets/js/auth-client.js) als zentraler Fetch-Wrapper für alle Cockpit-Seiten
### Schüler-Cockpit ([schueler.html](v2-platform/schueler.html))
- Profil-Header mit Avatar
- Sektion „📌 Aktuelle Aufträge" — Module die die Lehrperson zugewiesen hat (mit fixer Difficulty)
- Sektion „🎯 Freies Arbeiten" — generell freigegebene Module (Schüler*in wählt Difficulty aus `levelUnlocks`)
- Klick auf Modul-Card → öffnet Modul mit Token-URL-Param + Mode (`teacher_started` vs `free`)
- A11y-Profil-Settings werden auf `<body>` gespiegelt (`data-high-contrast`, `data-reduced-motion`, `data-text-scale`)
### Lehrperson-Cockpit ([teacher.html](v2-platform/teacher.html))
4 Tabs:
- **📡 Live** — Polling-Dashboard alle 3s, Karten pro Schüler*in mit Phase / Score-Bar / Stuck-Indikator / Nachteilsausgleich-Markierung
- **👥 Schüler*innen** — Tabelle mit Avatar, Name, Toggle-Boxen für Easy-Sprache, Hoher Kontrast, Reduced Motion, Screen-Reader, **Nachteilsausgleich** — Auto-Save bei Klick
- **📌 Aufträge** — bestehende Aufträge mit „Beenden"-Button + „+ Neuer Auftrag"-Modal (Modul + Difficulty wählen)
- **📊 Auswertung** — Placeholder, „kommt in späterer V2-Iteration"
### Admin-Config ([admin-config.html](v2-platform/admin-config.html))
- Nur für `role=admin` (Lehrperson mit `teachers.is_admin = 1`)
- Tuning-Inputs für Plattform-Werte: Heartbeat-Intervall (min/max), Stuck-Schwellwert, Token-TTL, Refresh-Fenster
- Auto-Save bei Eingabe (mit 800ms-Debounce)
- Range-Check serverseitig
## Neue API-Endpoints
| Endpoint | Methode | Zweck |
|---|---|---|
| `/api/auth/login` | POST | Login Lehrperson + Schüler*in |
| `/api/auth/refresh` | POST | Token erneuern |
| `/api/auth/logout` | POST | activity_log, sonst stateless |
| `/api/modules/available` | GET | Schüler*in: Aufträge + freie Module |
| `/api/modules/all` | GET | Liste aller V2-Module für Auftrags-Dropdown |
| `/api/teacher/classes` | GET | Klassen der Lehrperson |
| `/api/teacher/students` | GET / PATCH | Schüler-Liste + Toggle-Updates |
| `/api/teacher/assignments` | GET / POST / DELETE | Aufträge verwalten |
| `/api/teacher/live-status` | GET | Polling-Endpoint für Live-Dashboard |
| `/api/admin/platform-config` | GET / PATCH | Plattform-Tuning |
Alle Endpoints haben Mock-Pendants in `v2-platform/mock/api/...`.
## Test (lokal)
**Voraussetzung**: DB-Migration einspielen (war bisher nur als File da):
```bash
mysql -u root geograsim < v2-platform/db/init.sql
```
Dann gegen die **echte API**:
- `http://localhost/geograsim/v2-platform/` → Login mit deinen V1-Lehrperson-Credentials
- Schüler-Login mit Klassencode + username + passwort aus V1
Oder gegen die **Mock-API** (DB-frei):
- `http://localhost/geograsim/v2-platform/login.html` mit:
- Lehrperson: `lehrer@mock` / `geheim`
- Schüler*in: classCode `MOCK99`, username `lena|yusuf|sofia`, password `kind`
- Achtung: Mock erkennt sich aus `/mock/`-Pfad — die Standard-`login.html` geht gegen die echte API. Für reinen Mock-Test wäre `mock/login.html` nötig (TODO).
## Was NICHT da ist
- **Klasse / Schüler*in anlegen** im Cockpit (heute nur sehen/editieren)
- **Auswertung-Tab** — Placeholder
- **CSV-Export** — TODO
- **Lehrperson-Registrierung** (V1-Pattern weiter nutzen, V2-Variante später)
- **Passwort-Reset-Flow** (V1-Endpunkt weiter nutzen, V2-Variante später)
## Was du beachten musst
- **Token im localStorage**: bei XSS-Angriff kompromittierbar. Plattform-Code ist sauber, kein eval, keine dangerouslySetInnerHTML — aber langfristig HttpOnly-Cookie sicherer (kann später eingeführt werden)
- **Polling alle 3s**: bei 25 parallelen Lehrperson-Sessions = 8 Req/s. Verkraftbar, aber wenn die Last hoch wird → SSE oder WebSocket-Upgrade
- **Modul-URL-Pfad** `../v2-modules/<slug>/public/game.html` ist relativ zur Cockpit-URL. Im echten `/v2beta/`-Deployment muss das auf den richtigen Apache-Alias zeigen — bei Meister-Setup mitdenken
## Nächste sinnvolle Brocken (aus dem Reststapel)
4. **Meister informieren** für `/v2beta`-Apache-Alias + DB-Migration
5. **Klasse/Schüler*in anlegen** im Cockpit
6. **Auswertung-Tab** ausbauen
7. **Erste echte Modul-Migration** (Welle 1: Glossar + Lehrplan)
— Atlas, 2026-05-18