docs: document dashboard decision and update roadmap

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
JannisandClaude Sonnet 5.5 committed 2026-10-10 08:10:30 +02:00
1 parent 1b1657c925
commit 0fb8382765
3 files changed
+38 -5

No files matched your search

+2 -2
View File
@@ -150,8 +150,8 @@ Das UI bekommt die wirksamen Berechtigungen über `/api/auth/me` und blendet anh
| Admin – Kalender ✅ | `GET/POST /api/admin/calendars`, `PUT/DELETE /api/admin/calendars/{id}` |
| ICS-Feed | `GET /ics/{token}.ics` (öffentlich, Token-gesichert, ETag/Last-Modified) |
| Chat | `GET /api/chat/channels`, `GET /api/chat/channels/{id}/messages?before=`, `POST …/messages`, `POST …/read` |
| Dashboard | `GET /api/dashboard` |
| Hubs | `/hubs/live` (Live-Updates: Einkauf ✅, Essenplan ✅, Aufgaben ✅, Termine, Dashboard), `/hubs/chat` |
| Dashboard ✅ | `GET /api/dashboard` (alle Kacheln der Rolle in einem Request, ADR-0018) |
| Hubs | `/hubs/live` (Live-Updates: Einkauf ✅, Essenplan ✅, Aufgaben ✅, Termine ✅; das Dashboard lädt bei diesen Ereignissen neu), `/hubs/chat` |
| Betrieb | `/health`, `/alive` |
## 7. Frontend
+6 -3
View File
@@ -90,9 +90,12 @@ Legende: `[x]` erledigt, `[ ]` offen. Nach jeder Phase: Build ohne Warnungen, Te
- [ ] Stunden-Raster (Zeitachse) in Tag/Woche – Einträge werden als sortierte Liste je Tag gezeigt
## Phase 7 – Dashboard
- [ ] Kacheln: Heute zu essen, Termine heute + morgen, Einkaufsliste (Anzahl + Schnellerfassung), Meine Aufgaben, Familien-/Kinderaufgaben (Eltern), ungelesene Nachrichten
- [ ] Begrüßung mit Datum, einspaltig auf dem Smartphone
- [ ] Live-Aktualisierung
- [x] Kacheln: Heute zu essen, Termine heute + morgen, Einkaufsliste (Anzahl + Schnellerfassung in die Standardliste), Meine Aufgaben, Familien-/Kinderaufgaben (nur Eltern, inkl. wartender Bestätigungen), Nachrichten (Zähler 0 bis Phase 8); ein aggregierter Endpunkt `GET /api/dashboard`, nicht erlaubte Kacheln fehlen je Rolle serverseitig (ADR-0018)
- [x] Begrüßung mit Datum, einspaltig auf dem Smartphone (zwei Spalten ab `sm`, drei ab `lg`)
- [x] Live-Aktualisierung: vorhandene Hub-Ereignisse (Einkauf, Essenplan, Aufgaben, Punkte, Kalender) lösen ein gebündeltes Neuladen aus, Neuladen nach Wiederverbindung, Offline-Hinweis mit letztem Stand
- [x] Tests: Unit (Aufgabenauswahl/Sortierung/Limit), bUnit (Kacheln, leere Zustände, Gast, Schnellerfassung, Live-Bündelung, Offline, Abmelden von Ereignissen, Formatierung), Integration (401, Kacheln je Rolle, Essen/Termine heute, Einkaufszähler, private Aufgaben, Familienkachel + Bestätigungen, Gast)
- [ ] Aufgaben direkt im Dashboard abhaken – bewusst nicht umgesetzt (ADR-0018)
- [ ] Schnellerfassung Einkauf offline (Outbox) – bewusst nicht umgesetzt, nur online (ADR-0018)
## Phase 8 – Chat
- [ ] Familienchat + Direktnachrichten
+30
View File
@@ -0,0 +1,30 @@
# ADR-0018: Dashboard – ein aggregierter Endpunkt, Live-Aktualisierung per Neuladen
* Status: akzeptiert
* Datum: 2026-10-10
## Kontext
Die Startseite zeigt Kacheln aus fünf Fachbereichen (Essenplan, Kalender, Einkauf, Aufgaben, Chat). Rollen sehen unterschiedliche
Kacheln („Gast: eingeschränkte Kacheln“, Familien-/Kinderaufgaben nur für Eltern). Auf dem Smartphone zählen wenige Requests.
## Entscheidung
1. **Ein Endpunkt `GET /api/dashboard`** (Policy `DashboardView`) liefert alle Kacheln. Eine Kachel, die die Rolle nicht sehen darf,
fehlt (`null`) – die Berechtigung wird serverseitig aus der Rollenmatrix (inkl. Einstellungs-Ausnahmen) bestimmt, der Client rendert nur,
was er bekommt.
2. **Keine eigenen Regeln**: Kalender nutzt `CalendarEndpoints.GetUpcomingAsync` (Kalenderrechte, Serien, Zeitzone), Aufgaben dieselbe
Sichtbarkeit wie die Aufgabenliste (`TaskRules.CanSee`, private Aufgaben anderer werden nicht einmal geladen). Auswahl und Sortierung
der Aufgabenkacheln liegen als reine Logik in `DashboardTaskRules` (Domain, unit-getestet): überfällig zuerst, dann Fälligkeit, dann
Priorität; höchstens fünf Einträge, dazu Gesamtzahlen.
3. **Familie & Kinder** (nur `TasksApprove`): offene Aufgaben, die nicht mir gehören und der Familie oder einem Kind zugewiesen sind,
plus alle Aufgaben, die auf Bestätigung warten (stehen vorn).
4. **Live-Aktualisierung ohne neues Hub-Ereignis**: Die Seite lauscht auf die vorhandenen Ereignisse (Einkauf, Essenplan, Aufgaben, Punkte,
Kalender) und lädt den Endpunkt neu. Mehrere Ereignisse innerhalb von 400 ms werden zu einem Request gebündelt; nach einer
Wiederverbindung wird sofort geladen. Das hält Rechteprüfung an einer Stelle (der Endpunkt) und vermeidet, Nutzdaten je Kachel zu pushen.
5. **Schnellerfassung Einkauf** nutzt den vorhandenen Endpunkt `POST /api/shopping/lists/{id}/items` der Standardliste mit Client-Id
(idempotent). Sie funktioniert nur online; die Outbox (ADR-0011) bleibt der Einkaufsseite vorbehalten.
6. **Offline**: Bei Fehlern bleibt der zuletzt geladene Stand mit Hinweis sichtbar; ohne Stand gibt es „Erneut versuchen“.
7. **Chat** (Phase 8): Die Kachel erscheint für Rollen mit Chat-Rechten; der Zähler ist bis zur Chat-Umsetzung 0.
## Folgen
* Ein Request je Seitenaufruf; Kosten wachsen mit der Familiengröße, nicht mit der Datenmenge (Aufgaben: nicht erledigte, Termine: zwei Tage).
* Kacheln sind auf Gesamtlisten der Fachbereiche verlinkt; Aufgaben lassen sich im Dashboard (noch) nicht abhaken.