Skip to content

Processamento Assíncrono (Jobs e Filas)

A arquitetura de filas do sistema, gerenciada pelo Laravel Horizon sobre o Redis, garante que as integrações com a Wake e com o motor de IA local funcionem de forma resiliente, lidando com picos de requisições sem afetar a performance do servidor web.

1. Roteamento de Webhooks

Arquivo: ProcessWakeWebhook.php

Este Job atua como o maestro para eventos específicos disparados pela Fbits/Wake. * Controle de Concorrência (Debounce): Para evitar que múltiplas chamadas sobrecarreguem o banco, o job utiliza um lock no Cache do Laravel por 5 segundos (wake_{evento}_{id}). Se o mesmo evento chegar duplicado nesse intervalo, ele é sumariamente ignorado. * Roteamento Inteligente: Direciona o fluxo baseado na variável evento: * preco_alterado: Aciona o método updateApenasPreco, fazendo um micro-fetch apenas dos valores comerciais. * estoque_alterado: Aciona o método updateApenasEstoque, lendo múltiplos centros de distribuição e utilizando array_sum(array_column(...)) para consolidar o estoque físico real, atualizando a flag de disponibilidade. * produto_inserido / produto_alterado: Faz uma requisição completa à API para reconstruir o item com todos os campos adicionais (Estoque, Atributo, Informação, Categoria).

Arquivo: ProcessWakeProductUpdate.php

Responsável por sincronizar a estrutura de dados bruta que chega da Wake com o formato físico exigido pelo banco de dados local. * Mapeamento Duplo: Traduz as chaves recebidas para as colunas físicas da tabela (ex: sku, title, price) e também injeta os metadados dentro da coluna JSON raw_data. * Gatilho de Criação: Se o produto não existir no banco, ele realiza o WakeProduct::create() e, imediatamente após a inserção, dispara o job EnrichProductWithIA para classificar o novo item.

3. Inteligência Artificial Local (Ollama)

Arquivo: EnrichProductWithIA.php

Este Job conecta a lógica do Laravel ao servidor Ollama rodando localmente, enriquecendo o catálogo sem custos de API externa. O processamento é dividido em duas etapas otimizadas para o hardware: * Geração de Sinônimos e Contexto: Utiliza o modelo llama3.1:latest (especificamente em sua versão de 8B parâmetros, garantindo que o processamento caiba perfeitamente na VRAM do hardware local sem transbordar a GPU) para analisar o título e a categoria do produto. Ele devolve intenções de uso diário e gírias relacionadas, gravando-as na coluna tags_ia. * Geração de Embeddings: Constrói um texto vetorial contendo o título, categoria e as tags semânticas, passando pelo modelo bge-m3:latest para extrair os vetores matemáticos. * Indexação Silenciosa: Salva as informações no banco utilizando saveQuietly() (para não disparar eventos secundários do Eloquent de forma recursiva) e, por fim, invoca $this->product->searchable() para enviar o documento final rico para o motor do Meilisearch.