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).
2. Consolidação de Dados de Catálogo
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.