1. Problema
Escolher um filme em grupo exige reunir opções e conciliar preferências. Quando cada pessoa usa uma lista diferente, a decisão perde contexto e fica difícil acompanhar os votos.
2. Público-Alvo
Grupos que querem organizar opções de filmes, sortear uma escolha ou votar em uma sala compartilhada.
3. Solução
O Cine Random combina uma interface React com uma API FastAPI. A aplicação também pode ser instalada como PWA:
- Sorteio com filtros: Seleção de filmes por gênero, serviço de streaming, ano e nota.
- Votação em grupo: Participantes entram na mesma sala; WebSockets sincronizam os votos.
- Convites: Criação de cartões com filme e data da sessão.
4. Arquitetura e Decisões Técnicas
flowchart LR
A([Início])
B["1. Frontend<br/>React 19 + PWA"]
C["Criar ou entrar<br/>na sala via REST"]
D["2. Backend API<br/>FastAPI"]
E["Validar operação<br/>Router → Service"]
F[("PostgreSQL<br/>sala e estado")]
G["Frontend recebe<br/>o estado da sala"]
H["Abrir conexão<br/>WebSocket"]
I["Room Manager"]
J{"Evento do usuário?"}
A --> B --> C --> D --> E --> F --> G --> H --> I --> J
J -- "Desenho" --> K["Transmitir traço"]
K --> L["Atualizar todos<br/>os participantes"]
L --> I
J -- "Voto" --> M["Voting Service<br/>validar voto"]
M --> N[("PostgreSQL<br/>votos")]
N --> O["Transmitir resultado<br/>parcial"]
O --> L
J -- "Encerrar votação" --> P["Consolidar votos"]
P --> Q[("PostgreSQL<br/>resultado final")]
Q --> R["Transmitir resultado<br/>final"]
R --> S([Fim da rodada])
- Separação de responsabilidades: Rotas HTTP e WebSocket, serviços e repositórios organizam a entrada de dados, as regras de votação e a persistência.
- Sincronização: WebSockets atualizam o estado da sala para os participantes conectados.
- PWA: A interface inclui suporte à instalação e cache de arquivos estáticos.
- Documentação: O repositório inclui registros de decisões arquiteturais.
5. Desafios de implementação
- Votos simultâneos: A validação do consenso precisa considerar atualizações recebidas quase ao mesmo tempo na mesma sala.
- Isolamento de testes: As suítes usam fixtures e mocks para exercitar a API sem depender das respostas externas do TMDB e do Google OAuth.
6. Resultado
- A aplicação publicada permite testar o sorteio e a votação. O repositório reúne a implementação, os testes e a documentação da API.