44 lines
3.0 KiB
Markdown
44 lines
3.0 KiB
Markdown
# Diagnóstico da Área de Mensagens
|
|
|
|
## Faltando no Frontend
|
|
|
|
| Item | Arquivo | Função |
|
|
| :--- | :--- | :--- |
|
|
| Zustand + Immer | `store/chatStore.ts` | Store central — gerencia chats, mensagens, optimistic UI, socket listeners. É o cérebro do estado |
|
|
| Zustand | `store/instanceStore.ts` | Gerencia instâncias WhatsApp, QR codes, reconexão |
|
|
| Socket.IO Client | `services/socketService.ts` | Camada de comunicação real-time (rooms: tenant, instance, chat) |
|
|
| Axios | `services/chatApiService.ts` | Client HTTP com refresh automático de token, todas as APIs (chats, messages, instances, media, auth) |
|
|
| useChatFilter | `hooks/inbox/useChatFilter.ts` | Filtros da lista (busca, favoritos, arquivados, scopes) |
|
|
| useInstanceSelector | `hooks/inbox/useInstanceSelector.ts` | Seleção e troca de instância ativa |
|
|
| useMessageInput | `hooks/inbox/useMessageInput.ts` | Lógica do input de envio |
|
|
| Inbox Page | `pages/inbox/index.tsx` | Orquestrador — conecta todos os hooks e componentes |
|
|
|
|
## Faltando no Backend
|
|
|
|
| Item | Arquivo | Função |
|
|
| :--- | :--- | :--- |
|
|
| Express + CORS + Helmet | `server.ts` | Server HTTP, rotas, middleware de auth |
|
|
| Socket.IO Server | `infra/socket/socketServer.ts` | Rooms (tenant/instance/chat), JWT auth no handshake |
|
|
| WhatsAppConnectionManager | `connection/WhatsAppConnectionManager.ts` | Core — gerencia conexão Baileys, reconexão com backoff exponencial, watchdog, sync pós-reconexão, emissão de baileys:log |
|
|
| Chat Routes | `modules/chats/chat.routes.ts` | REST API de chats — listagem, mensagens paginadas, archive, pin, mark read, search |
|
|
| Avatar Proxy | `whatsapp.send.routes.ts` | Proxy de foto de perfil via Baileys com cache em DB |
|
|
| Prisma Schema | `prisma/schema.prisma` | Modelos: User, Instance, Chat, Message, Contact, Protocol, AiBot, Broadcast |
|
|
| PostgreSQL | via Prisma | Banco principal |
|
|
| DragonflyDB | `infra/cache/dragonfly.ts` | Cache Redis-compatible (status de instâncias, QR codes) |
|
|
|
|
## Conceitos Arquiteturais Ausentes
|
|
|
|
- **Optimistic UI:** `sendMessage` injeta mensagem no estado antes da resposta do server.
|
|
- **Modelo de rooms Socket.IO:** `tenant:{userId}` (auto-join) → `instance:{id}` → `chat:{id}`.
|
|
- **Fluxo de mensagem completo:** Baileys event → `MessageHandler` → Prisma → Socket.IO emit → chatStore listener → useMemo bridge → `MessageArea` → `MessageBubble`.
|
|
- **Sync histórico:** `handleHistory()` salva em batch com `createMany` + skipDuplicates.
|
|
- **Status de mensagem:** `messages.update` do Baileys → DB update → `message:status` socket event.
|
|
- **JWT auth:** access token + refresh token com renovação automática no interceptor Axios.
|
|
|
|
## Correções Relevantes
|
|
|
|
- **Prisma ORM:** Não é "provavelmente", é certeza. Está no `package.json` e o `schema` está definido.
|
|
- **Queries:** `message.repository.ts` utiliza queries Prisma (ORM), e não SQL direto.
|
|
- **Reactions:** Reactions das mensagens ainda não estão implementadas no backend (são stub).
|
|
- **Baileys:** Dependência direta é `@whiskeysockets/baileys`, não um "WebSockets / Baileys" genérico.
|