Skip to content

Importação em Massa (WakeImportService)

O WakeImportService é o motor pesado da integração. Enquanto os webhooks atualizam os produtos em tempo real (um a um), este serviço é responsável por varrer todo o catálogo da Wake/Fbits de forma sequencial e massiva, inserindo ou atualizando os dados no banco local.

1. Conexão e Resiliência

A comunicação com a API da Wake (https://api.fbits.net/produtos) é desenhada para ser robusta contra instabilidades de rede: * Lotes de 100: A requisição é forçada a trazer 100 registros por vez (quantidadeRegistros=100), otimizando o tráfego e o tempo de processamento. * Campos Adicionais: Para evitar requisições secundárias, a URL já exige o envio dos blocos de Estoque, Atributo, Informacao e Categoria na mesma chamada. * Mecanismo de Retry: Caso a API da Wake demore a responder (timeout de 30s) ou retorne erro, o sistema tenta a mesma requisição até 3 vezes, com 1 segundo de intervalo entre as tentativas (retry(3, 1000)).

2. Paginação Baseada em Cabeçalhos (Headers)

A paginação não é feita por números de página tradicionais (1, 2, 3...), mas sim por ponteiros de ID, o que é muito mais seguro e rápido para bancos de dados grandes. * O sistema lê o header x-tem-proxima-pagina para saber se o loop while deve continuar. * O próximo lote sempre começará a partir do ID capturado no header x-ultimo-produto-variante-id. * Trava de Segurança: Existe um mecanismo anti-loop. Se a API falhar e devolver o mesmo último ID repetidamente (ou nulo), o laço é quebrado (break) para evitar o travamento infinito do servidor.

3. Prevenção de Bloqueios (Rate Limit)

A Fbits/Wake bloqueia IPs que fazem muitas requisições por segundo. O serviço possui uma "blindagem" embutida: * Lê o cabeçalho x-rate-limit-remaining em cada resposta. * Se a cota de requisições restantes cair para menos de 10, o script força o servidor a "dormir" por 3 segundos (sleep(3)), garantindo que a cota se renove antes de disparar o próximo lote, evitando o banimento do sistema.

4. Processamento e Regras de Negócio

Para cada produto retornado no lote de 100, o serviço executa um updateOrCreate utilizando o produto_variante_id como chave primária de verificação.

  • Consolidação de Estoque (Multi-CD): Assim como nos webhooks, o script soma a coluna estoqueFisico de todos os Centros de Distribuição retornados no array da API para encontrar o estoque real ($estoqueTotal).
  • Gatilho de Disponibilidade: A coluna availability só é registrada como verdadeira (true) se a tag nativa $item['valido'] for verdadeira e se o $estoqueTotal consolidado for maior que zero.
  • Todos os dados não mapeados nas colunas físicas são encapsulados e preservados em formato JSON na coluna raw_data.