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
estoqueFisicode todos os Centros de Distribuição retornados no array da API para encontrar o estoque real ($estoqueTotal). - Gatilho de Disponibilidade: A coluna
availabilitysó é registrada como verdadeira (true) se a tag nativa$item['valido']for verdadeira e se o$estoqueTotalconsolidado 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.