--- title: Badge WhatsApp topbar - duplo dono aliases: - WA Badge Topbar Fix - Badge WhatsApp Errado tags: - claude-memory/project - whatsapp - intranet - bug-fix - cache type: project created: 2026-05-06 related: - "[[feedback_chat_wa_principal_only]]" - "[[whatsapp_chat_2026_03_26]]" --- # Badge WhatsApp topbar — dois donos sobrescrevendo Em 2026-05-06 o badge do icone WhatsApp no topbar mostrava numero errado (ex: 2) mesmo sem mensagens novas. Diagnostico durou varias rodadas porque o backend retornava 0 mas o navegador mostrava 2. ## Why O badge tinha **DOIS lugares que escreviam nele**: 1. `menu.php::waCheckUnread()` — sempre rodando, chama `whatsapp-chat/unread-count` e usa contagem **per-user** via `whatsapp_group_user_reads.last_read_message_id` ✅ correto 2. `whatsapp_chat/index.php::atualizarBadgeTopbar()` — so quando a pagina do chat esta aberta, loopava `allGrupos` somando o campo `unread_count` global da tabela `whatsapp_unread_counts` — esse contador acumulava lixo (ex: 736, 453, 52) e nunca era resetado per-user ❌ errado Resultado: ao abrir a pagina do chat, ela sobrescrevia o badge correto do menu. 3 grupos com contador stale > 0, menos 1 que estava aberto = badge mostra "2". ## How to apply - Ambas as funcoes (menu.php E whatsapp_chat/index.php) DEVEM consultar o mesmo endpoint `whatsapp-chat/unread-count` - Sempre usar `cache: 'no-store'` + `?_=Date.now()` no fetch para evitar cache do navegador - Response do endpoint deve ter `Cache-Control: no-store` + `Pragma: no-cache` - A tabela `whatsapp_unread_counts` (campo `unread_count`) acumula valores stale - **NAO usar em frontend para badge per-user** - Lugar correto para per-user: `whatsapp_group_user_reads.last_read_message_id` ## Tecnica de diagnostico que funcionou Quando o backend dizia 0 mas o frontend mostrava outro numero, adicionar `log_message('notice', '[WA-BADGE] user=...')` no controller, deployar, pedir Ctrl+Shift+R, e ler o log no servidor confirmou que o backend estava correto. Aí virou caça ao "outro caminho" no frontend. ## Arquivos modificados - `app/Controllers/WhatsAppChat.php::unreadCount()` — headers no-cache no response - `app/Views/includes/menu.php::waCheckUnread()` — cache-buster e cache: 'no-store' - `app/Views/whatsapp_chat/index.php::atualizarBadgeTopbar()` — agora chama o endpoint, nao calcula local ## Bonus removido na mesma sessao 3 console.log spam que poluiam a console do navegador: - `[AVATAR] carregarProfilePics called` - `[AVATAR] phones to fetch` - `[topbar-badges]`