Table of Contents
- 📦 Correção Wasabi Storage
- 1. Contexto e Diagnóstico
- ❌ Falha 1 — Ausência de Limpeza Local
- ❌ Falha 2 — Caminho de Mídia Inconsistente no Banco de Dados
- ❌ Falha 3 — Handlers Duplicados ao Reconfigurar
- ❌ Falha 4 — Remoção Órfã de Mídias
- 2. Estrutura de Arquivos no Wasabi
- 3. Script de Migração de Mídias (migrate-media-wasabi.mjs)
📦 Correção Wasabi Storage
1. Contexto e Diagnóstico
O plugin de armazenamento UnifiedStorageProvider estava configurado para enviar mídias de mensagens recebidas e enviadas do WhatsApp para o Wasabi. Entretanto, os arquivos continuavam acumulando localmente no diretório do servidor (backend/media), consumindo espaço em disco desnecessariamente.
Identificamos e corrigimos 4 falhas críticas no comportamento de armazenamento:
❌ Falha 1 — Ausência de Limpeza Local
Os arquivos de mídia eram carregados com sucesso no Wasabi S3, mas o arquivo temporário local no servidor nunca era deletado.
- Correção: Implementado
fs.unlink()assíncrono para apagar o arquivo local imediatamente após o upload remoto bem-sucedido.
❌ Falha 2 — Caminho de Mídia Inconsistente no Banco de Dados
A coluna mediaPath no banco persistia com o caminho local do arquivo (/home/deploy/...). Como o arquivo agora é apagado da máquina após o envio para a nuvem, isso causava erros ao tentar ler mídias locally.
- Correção: Quando a mídia é remota, a coluna
mediaPathé salva comonullno banco de dados, e a recuperação é feita de forma exclusiva pelo endereço domediaUrlque aponta para o bucket remoto do Wasabi.
❌ Falha 3 — Handlers Duplicados ao Reconfigurar
O salvamento de configurações do painel admin reativava o plugin chamando o método activate(). Isso registrava novas instâncias de rotas do Express na memória do servidor a cada clique em salvar.
- Correção: Adicionada uma flag de controle
routesRegisteredpara registrar os endpoints HTTP apenas na primeira inicialização do plugin.
❌ Falha 4 — Remoção Órfã de Mídias
Ao deletar uma instância de conexão do WhatsApp, as mídias salvas no bucket remoto ficavam órfãs na nuvem.
- Correção: Adicionado o método
deletePrefixna interface de armazenamento. Agora, quando uma instância é removida, um processo em background efetua a varredura e deleta em lotes de 1000 todos os arquivos do Wasabi associados àquela instância de forma silenciosa.
2. Estrutura de Arquivos no Wasabi
As mídias do WhatsApp são arquivadas de forma organizada no bucket do Wasabi seguindo a seguinte estrutura de prefixos:
whatsapp/{tenantId}/{instanceId}/{fileName}
3. Script de Migração de Mídias (migrate-media-wasabi.mjs)
Caso mídias antigas precisem ser migradas de forma retroativa para liberar espaço em disco, disponibilizamos o script migrate-media-wasabi.mjs na raiz do projeto.
Como usar o script:
# Simulação em Dry-Run (não faz alterações no disco/banco):
node migrate-media-wasabi.mjs --dry-run
# Migração definitiva:
node migrate-media-wasabi.mjs
O script lê os registros do banco de dados, faz o upload dos binários antigos no Wasabi com o formato correspondente, atualiza a referência na tabela e apaga com segurança os arquivos locais correspondentes.