Pular para o conteúdo

Optimizer

IN-SCOPE

O Optimizer é a aplicação de gestão do catálogo VTEX com enriquecimento por IA. Sincroniza produtos e SKUs da VTEX, aplica scoring de qualidade e permite enriquecimento automático via AirOps.

AtributoValor
URLhttps://app.profarma.dev/optimizer/
Path/optimizer/*
TipoSPA + Sub-Hono (API backend)
AuthJWT Cookie + Turnstile + Internal API Key
Stack FrontendReact + Tailwind CSS
StatusProdução
  • Visualização de produtos e SKUs VTEX
  • Busca avançada com filtros (categoria, marca, status, score)
  • Detalhamento de especificações técnicas
  • Imagens e metadata de produto
  • Full sync: Cron diário às 05:00 BRT via Durable Object
  • Incremental sync: Trigger manual para atualizações parciais
  • SKU sync: Sincronização granular de SKUs
  • Emergency stop: Parada de emergência em caso de problemas
  • Pipeline: Produto → AirOps Workflow → Specs enriquecidas
  • Scoring de qualidade: título, descrição, imagem, specs
  • Review workflow: pendente → aprovado → publicado
  • Histórico de enriquecimentos por produto
  • Status tracking: pending → reviewed → approved → published
  • Operações de aprovação e publicação restritas (humano obrigatório)
  • Lock em rotas críticas (/publish, /approve, /settings)
MétodoPathDescrição
*/optimizer/api/*Rotas delegadas ao sub-app Hono
MétodoPathDescrição
POST/optimizer/api/internal/trigger-cron-syncTrigger manual de sync
POST/optimizer/api/internal/emergency-stopPara sync em andamento
GET/optimizer/api/internal/do-sync-statusStatus do DO de sync
POST/optimizer/api/internal/emergency-resetReset forçado (EMERGENCY_RESET_KEY)
POST/optimizer/api/internal/sku-full-syncSync completo de SKUs
POST/optimizer/api/internal/sku-incremental-syncSync incremental
/optimizer/api/internal/*
/optimizer/api/catalog/fix-*
/optimizer/api/catalog/normalize-*
/optimizer/api/catalog/ensure-*
/optimizer/api/catalog/analyze
/optimizer/api/catalog/products (read-only)
/optimizer/api/catalog/stats (read-only)
/optimizer/api/catalog/enrichment-stats (read-only)
flowchart LR
    KEY["Internal<br/>API Key"] --> R1["/catalog/publish"]
    KEY --> R2["/catalog/approve"]
    KEY --> R3["/settings"]
    KEY --> R4["/admin"]
    R1 --> X1["Bloqueado: Operação crítica"]
    R2 --> X2["Bloqueado: Operação crítica"]
    R3 --> X3["Bloqueado: Configurações"]
    R4 --> X4["Bloqueado: Admin"]
    style KEY fill:#1a2744,stroke:#00aaaf,color:#e0e6f0
    style R1 fill:#dc2626,stroke:#991b1b,color:#fff
    style R2 fill:#dc2626,stroke:#991b1b,color:#fff
    style R3 fill:#dc2626,stroke:#991b1b,color:#fff
    style R4 fill:#dc2626,stroke:#991b1b,color:#fff
    style X1 fill:#7f1d1d,stroke:#991b1b,color:#fca5a5
    style X2 fill:#7f1d1d,stroke:#991b1b,color:#fca5a5
    style X3 fill:#7f1d1d,stroke:#991b1b,color:#fca5a5
    style X4 fill:#7f1d1d,stroke:#991b1b,color:#fca5a5
ServiçoUsoCredenciais
VTEX CommerceCatálogo (produtos, SKUs, specs)VTEX_APP_KEY + VTEX_APP_TOKEN
AirOpsPipeline de enriquecimento IAAIROPS_API_KEY
  • Testar Internal API Key bypass em rotas bloqueadas
  • Verificar rate limit de 100 req/min na Internal API
  • Testar acesso direto às rotas de catalog sem auth
  • Validar que /publish e /approve exigem humano autenticado
  • Testar timing-safe comparison da API key