docs: document dashboard decision and update roadmap
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1b1657c925
commit
0fb8382765
3 files changed
+38
-5
No files matched your search
@@ -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
@@ -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
|
||||
|
||||
@@ -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.
|
||||
Reference in new issue
Block a user