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