docs: Wahl result view, live chat, and the gateway race fix

Plan + client README updated for the guest Wahl result endpoint/tab, the
WebSocket chat wiring, and the ChatGateway caller-promise fix. Section 8
now scopes the remaining Flutter work to the Authentik-dependent screens.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-10 09:03:42 +02:00
co-authored by Claude Sonnet 5
parent e55faeaa95
commit d5ecdcd3c4
3 changed files with 13 additions and 9 deletions
+7 -5
View File
@@ -26,13 +26,15 @@ backend, which also serves the interim plain-HTML client at `/`).
- The token is stored via `shared_preferences` (localStorage on web) and
restored on start; `GET /auth/me` resolves the role for a role-aware home.
- **Home** (`lib/screens/home_screen.dart`) — identity card + navigation.
- **Workshop-Wahl** (`lib/screens/wahl_screen.dart`, guests) — loads
`GET /wahl/guest/overview`, tap workshops in order (max 3) to set
priorities, `POST /wahl/:id/teilnehmer`.
- **Workshop-Wahl** (`lib/screens/wahl_screen.dart`, guests) — two tabs:
*Wünsche* (`GET /wahl/guest/overview`, tap workshops in order, max 3,
`POST /wahl/:id/teilnehmer`) and *Ergebnis* (`GET /wahl/guest/results`
PENDING / ASSIGNED with workshop + wish rank / UNASSIGNED).
- **Dateien** (`lib/screens/files_screen.dart`) — `GET /files/:kcId`,
filtered server-side by the caller's visibility tier.
- **Chat** (`lib/screens/chat_screen.dart`) — channel + message list
(read-only; sending is a WebSocket path, still to do).
- **Chat** (`lib/screens/chat_screen.dart` + `lib/chat_socket.dart`) —
channel list, REST history, then a live `/chat` WebSocket connection
(`chat:join` / `chat:send` / `chat:message`) with a compose bar.
## Architecture
+1 -1
View File
@@ -326,7 +326,7 @@ class Api {
);
}
// --- chat (read-only for now; sending is a WebSocket-only path) ---
// --- chat: REST for channels/history; live send/receive is the /chat WS ---
Future<List<ChatChannel>> channels(String kcId) async {
final list = await _get('/chat/$kcId/channels') as List<dynamic>;
return list.map((e) => ChatChannel.fromJson(e as Map<String, dynamic>)).toList();