ADR 0003 — Presença WebSocket em memória
- Status: Aceite
- Data: 2026-03
Contexto
O painel e o CRM cliente precisam de “quem está online” com baixa latência. Redis já existe no projeto para cache de branding. Kafka/SQS não fazem parte desta stack (Nest + PostgreSQL + Socket.IO + Redis pontual).
Decisão
Sessões Socket.IO ficam num Map em processo (UserPresenceService). Namespace /presence, salas tenant:<id> e admin:observer. Admins observam sem contar como online.
Redis não é o store de presença. Não há sticky-session documentada: múltiplas réplicas da API não partilham o mapa.
Consequências
- Positivo: zero round-trip; implementação simples; restart limpa sessões fantasma.
- Negativo: horizontal scaling de presença exige sticky sessions ou migrar o store (Redis adapter Socket.IO) — ADR futuro se houver mais do que uma réplica ativa.
- REST:
GET /api/v1/presence/*lê o mesmo mapa; um pod A não vê sockets do pod B.