// projet académique · décembre 2025
Realtime Poll.
Serveur de sondages en temps réel avec WebSockets, construit en Scala avec ZIO et Tapir.
// Overview
Serveur HTTP fonctionnel pour créer des sondages, voter et voir les résultats se mettre à jour en temps réel. L'état des sondages est géré en mémoire via un Ref ZIO (immutable, thread-safe) et les mises à jour sont diffusées à tous les clients connectés via un Hub ZIO.
// Architecture
flowchart LR
C["Client Web (static)\nHTML/JS vanilla"] -->|REST API| API
subgraph API["REST API — Tapir endpoints"]
R1["POST /poll (création)"]
R2["GET /poll/{id} (consultation)"]
R3["POST /poll/{id}/vote"]
end
API --> REF["Ref[Map[...]] (ZIO Ref)\nÉtat en mémoire (volatile)"]
REF --> HUB["Hub ZIO\nBroadcast WebSocket\nWS /poll/{id}/results"]
// Fonctionnalités
// API REST
- ▸ POST /poll — créer un sondage
- ▸ GET /poll/{id} — consulter
- ▸ POST /poll/{id}/vote — voter
// Temps réel
- ▸ WS /poll/{id}/results
- ▸ Broadcast via Hub ZIO
- ▸ Mise à jour sans refresh
// Points techniques
// ZIO Ref & Hub
État partagé thread-safe (Ref) et diffusion concurrente (Hub) — patterns fonctionnels purs pour la concurrence.
// Tapir
Définition des endpoints REST + WebSocket de manière type-safe, avec génération auto de Swagger UI.
// Front-end vanilla
Client HTML/JS servi directement par le serveur — pas de framework front, pas de build step.
// Swagger UI
Documentation API auto-générée disponible sur /docs.