refactor: enhance chat components with type safety and response functionality

- Updated type definitions in ChatWindow and MessageList components for better type safety.
- Improved MessageInput to handle message responses, including a preview feature for replying to messages.
- Enhanced the chat message handling logic to support message references and improve user interaction.
- Refactored notification utility functions to support push notifications and rate limiting for email sending.
- Updated backend schema to accommodate new features related to message responses and notifications.
This commit is contained in:
2025-11-04 20:36:01 -03:00
parent 15374276d5
commit 12db52a8a7
23 changed files with 3195 additions and 503 deletions

View File

@@ -0,0 +1,117 @@
# 🔔 Configuração de Push Notifications
## Passo 1: Configurar VAPID Keys
### 1.1 Gerar VAPID Keys (se ainda não tiver)
Execute no diretório do backend:
```bash
cd packages/backend
bunx web-push generate-vapid-keys
```
Isso gerará duas chaves:
- **Public Key**: Segura para expor no frontend
- **Private Key**: Deve ser mantida em segredo, apenas no backend
### 1.2 Configurar no Convex (Backend)
As variáveis de ambiente no Convex são configuradas via dashboard ou CLI:
#### Opção A: Via Dashboard Convex
1. Acesse https://dashboard.convex.dev
2. Selecione seu projeto
3. Vá em **Settings** > **Environment Variables**
4. Adicione as seguintes variáveis:
```
VAPID_PUBLIC_KEY=BDerX0lK_hBCLpC7EbuxoJb2EJ7bcCLaHWxkNumVbvrx9w0MmJduHxJOP3WBwBP-SpQGcueMOyHCv7LFK3KnQks
VAPID_PRIVATE_KEY=KWkJLMxCuCPQQiRXIJEt06G4pTdW0FaUN_vMyY02sc4
FRONTEND_URL=http://localhost:5173
```
#### Opção B: Via CLI Convex
```bash
cd packages/backend
npx convex env set VAPID_PUBLIC_KEY "BDerX0lK_hBCLpC7EbuxoJb2EJ7bcCLaHWxkNumVbvrx9w0MmJduHxJOP3WBwBP-SpQGcueMOyHCv7LFK3KnQks"
npx convex env set VAPID_PRIVATE_KEY "KWkJLMxCuCPQQiRXIJEt06G4pTdW0FaUN_vMyY02sc4"
npx convex env set FRONTEND_URL "http://localhost:5173"
```
### 1.3 Configurar no Frontend
Crie um arquivo `.env` no diretório `apps/web/` com:
```env
VITE_VAPID_PUBLIC_KEY=BDerX0lK_hBCLpC7EbuxoJb2EJ7bcCLaHWxkNumVbvrx9w0MmJduHxJOP3WBwBP-SpQGcueMOyHCv7LFK3KnQks
```
**Importante**: Reinicie o servidor de desenvolvimento após criar/modificar o `.env`.
## Passo 2: Configurar FRONTEND_URL
A variável `FRONTEND_URL` é usada nos templates de email para gerar links de volta ao sistema.
### Para Desenvolvimento:
```
FRONTEND_URL=http://localhost:5173
```
### Para Produção:
```
FRONTEND_URL=https://seu-dominio.com
```
## Passo 3: Testar Push Notifications
### 3.1 Registrar Subscription no Frontend
O sistema automaticamente solicita permissão e registra a subscription quando:
1. O usuário faz login
2. Acessa o chat pela primeira vez
3. O Service Worker é instalado
### 3.2 Verificar se está funcionando
1. Abra o DevTools do navegador (F12)
2. Vá na aba **Application** > **Service Workers**
3. Verifique se o Service Worker está registrado
4. Vá em **Application** > **Notifications**
5. Verifique se a permissão está concedida
### 3.3 Testar envio de push
1. Abra o chat em duas abas/janelas diferentes
2. Faça login com usuários diferentes
3. Envie uma mensagem de um usuário para o outro
4. A mensagem deve aparecer como notificação push na outra aba
## Troubleshooting
### Push notifications não funcionam
1. **Verificar VAPID keys**: Certifique-se de que as keys estão configuradas corretamente
2. **Verificar Service Worker**: O arquivo `sw.js` deve estar em `/static/sw.js`
3. **Verificar permissões**: O navegador deve ter permissão para notificações
4. **Verificar console**: Procure por erros no console do navegador e do Convex
### Erro "VAPID keys não configuradas"
- Verifique se as variáveis de ambiente estão configuradas no Convex
- Reinicie o servidor Convex após configurar as variáveis
- Verifique se os nomes das variáveis estão corretos (case-sensitive)
### Service Worker não registra
- Verifique se o arquivo `sw.js` existe em `apps/web/static/sw.js`
- Verifique se o servidor está servindo arquivos estáticos corretamente
- Limpe o cache do navegador e tente novamente
## Segurança
⚠️ **IMPORTANTE**:
- A **Private Key** nunca deve ser exposta no frontend
- Use variáveis de ambiente diferentes para desenvolvimento e produção
- Regenere as keys se suspeitar de comprometimento
- Mantenha as keys em segredo (não commite no Git)