Skip to content

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)

  1. 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 status 9 e 11. Os IDs encontrados são adicionados a um conjunto (Set) chamado idsParaProcessar, o que garante que não haverá duplicidade de processamento caso um pedido mude de status dentro da mesma janela de tempo.
  2. 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 ao Set. Se o conjunto final estiver vazio, a execução é encerrada.
  3. 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 os produtos e o cpf_cnpj. O campo updated_at recebe a estampa de tempo atual.

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)

  1. Levantamento de Pendências: O script inicia consultando a tabela wake_orders através da query SELECT pedido_id FROM wake_orders WHERE cpf_cnpj IS NULL para identificar exatamente quais registros precisam ser corrigidos.
  2. 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 /status usada no sync principal). Essa rota retorna o objeto completo do pedido.
  3. 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 = $2 e 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.