# 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.