3.0 KiB
3.0 KiB
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:
sendMessageinjeta 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 comcreateMany+ skipDuplicates. - Status de mensagem:
messages.updatedo Baileys → DB update →message:statussocket 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.jsone oschemaestá definido. - Queries:
message.repository.tsutiliza 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.