Sincronização Wake
🔄 Sincronização de Dados com a Wake Commerce
Esta seção documenta os scripts responsáveis por integrar o banco de dados local (rastreio_db) com a API da Wake Commerce (Plataforma FBits), garantindo que a fila de rastreio seja alimentada corretamente com os pedidos despachados.
Os dois scripts conectam-se ao banco de dados PostgreSQL utilizando o host foconopreco_postgres na porta 5432, com o usuário app_user e a senha configurada no ambiente. Ambos utilizam uma função utilitária sleep(ms) que introduz um atraso de 200 milissegundos entre as iterações para evitar bloqueios por excesso de requisições (rate limit) na API da Wake.
1. Script Principal de Sincronização (sync_wake.js)
Este script é o motor contínuo de ingestão de dados. Ele busca pedidos recentes e atualiza o banco local através de uma lógica de UPSERT (inserção ou atualização).
⏱️ Controle Temporal
- A execução do script varre as atualizações ocorridas nas últimas 48 horas.
- Utiliza a função
formatarDataWake(data)para converter as datas do JavaScript em uma string compatível com a API da Wake (removendo o 'T' e limitando a 19 caracteres).
🔍 Fluxo de Execução (Passo a Passo)
- Busca na API (Passo 1): O script consulta a rota
https://api.fbits.net/pedidos/situacaoPedido/${statusId}passando a data inicial e final. Ele procura especificamente por pedidos nos status9e11. Os IDs encontrados são adicionados a um conjunto (Set) chamadoidsParaProcessar, o que garante que não haverá duplicidade de processamento caso um pedido mude de status dentro da mesma janela de tempo. - Busca no Banco Local (Passo 2): O script realiza um
SELECT pedido_id FROM wake_orders WHERE situacao_pedido_id IN (9, 11)para resgatar pedidos que já estão no banco de dados e ainda estão em andamento, adicionando seus IDs também aoSet. Se o conjunto final estiver vazio, a execução é encerrada. - Extração e Persistência (Passo 3): Para cada ID contido no conjunto, o script consome a rota de detalhes
https://api.fbits.net/pedidos/${pedidoId}/status.- O script extrai de forma inteligente o documento do cliente acessando o nó
usuario, priorizando o CNPJ (detalhes.usuario?.cnpj) e, se ausente, utilizando o CPF (detalhes.usuario?.cpf). - Uma query de
INSERT ... ON CONFLICT (pedido_id) DO UPDATEé executada para gravar diversas informações essenciais, incluindo:situacao_pedido_id,nota_fiscal,chave_acesso_nfe,nome_transportadora,url_rastreamento, um JSON contendo osprodutose ocpf_cnpj. O campoupdated_atrecebe a estampa de tempo atual.
- O script extrai de forma inteligente o documento do cliente acessando o nó
2. Script de Manutenção e Preenchimento (backfill_documentos.js)
Este é um script de suporte focado na correção retroativa de dados, criado especificamente para enriquecer os registros que foram salvos sem as informações de documento do destinatário.
🔍 Fluxo de Execução (Passo a Passo)
- Levantamento de Pendências: O script inicia consultando a tabela
wake_ordersatravés da querySELECT pedido_id FROM wake_orders WHERE cpf_cnpj IS NULLpara identificar exatamente quais registros precisam ser corrigidos. - Busca do Objeto Completo: Para cada pedido pendente, ele faz uma requisição HTTP GET para a rota
https://api.fbits.net/pedidos/${pedidoId}(diferente da rota de/statususada no sync principal). Essa rota retorna o objeto completo do pedido. - Mapeamento e Atualização: O documento é extraído validando
detalhes.usuario?.cnpj || detalhes.usuario?.cpf.- Se o documento for encontrado, o banco é atualizado via
UPDATE wake_orders SET cpf_cnpj = $1 WHERE pedido_id = $2e a ação é logada como sucesso. - Se o pedido não contiver documento na resposta da API da Wake, o sistema gera um alerta (Warning) no console.
- Se o documento for encontrado, o banco é atualizado via