Micro-SaaS & MVPs
DeepSeek R1
Chat em Tempo Real com WebSockets, Salas e Histórico Persistido
Servidor Node.js + WebSocket com salas por projeto, histórico no Postgres, presença (quem está online) e reconnect automático no cliente.
0cópias
0joinhas
0favoritos
O prompt
Desenvolva um sistema de chat em tempo real completo em Node.js.
Parâmetros:
- Nome do Produto: {{nome_produto}}
- Banco para Histórico: postgresql (Prisma)
- Limite de Mensagens por Sala Retornadas no Reconnect: {{limite_reconnect}}
Requisitos:
1. Servidor Fastify + @fastify/websocket: clientes se conectam em ws://.../chat?token= e entram em salas por nome (ex.: /sala/projeto-x). Autenticação simples por token de usuário (middleware valida antes do upgrade).
2. Protocolo JSON bidirecional: cliente envia {type:'message', text, replyTo?}; servidor responde com broadcast {type:'message', from, text, ts} para a sala e ack {type:'ack', id} ao remetente. Mensagens >2000 chars são rejeitadas com erro claro.
3. Histórico persistido no Postgres (tabela messages: id, roomId, userId, text, createdAt); ao entrar na sala, o cliente recebe as últimas {{limite_reconnect}} mensagens antes de receber novas em tempo real.
4. Presença: servidor mantém mapa sala → usuários conectados e broadcasta {type:'presence', online:[...]} quando alguém entra/sai; endpoint REST GET /api/rooms/:id/members para consulta pontual.
5. Cliente (arquivo HTML único com JS embutido): lista de salas, área de mensagens com autor + horário, input com Enter para enviar, indicador 'conectando...' e reconnect automático com backoff exponencial (1s → 30s máx) que re-sincroniza o histórico.
6. Rate limit por usuário: 20 mensagens/10s — excedentes recebem {type:'error', code:'rate_limited'} e o input é desabilitado no cliente por 5s.
Como usar
- Substitua {{nome_produto}} e {{limite_reconnect}} (ex.: 50).
- Cole no DeepSeek/Cursor em uma pasta com package.json — servidor + cliente HTML são criados.
- npm run dev: abra o chat.html em duas abas, entre na mesma sala e converse; feche uma aba e veja a presença atualizar na outra.
- Para escalar além de 1 instância, peça à IA: 'adapte para Redis pub/sub' — o protocolo JSON já está pronto para isso.
Exemplo de saída
Servidor Fastify + @fastify/websocket (~200 linhas) + chat.html (~180): salas por nome com auth por token no upgrade, broadcast + ack com id, histórico Prisma/Postgres reenviando as últimas 50 mensagens na entrada, presença em tempo real (online:[...]), reconnect com backoff 1s→30s e rate limit 20 msg/10s com desabilitação do input no cliente.