Catalogo - Painel API e Storefront
O catalogo deixou de ser apenas um conjunto de mocks locais.
Leitura pensada para explicar responsabilidades, ordem de execução e trechos reais do código com foco no fluxo da implementação.
O que mudou
O catalogo deixou de ser apenas um conjunto de mocks locais.
Agora ele tem uma camada propria de dominio com:
- store administrativo;
- persistencia hibrida;
- APIs do painel;
- API publica versionada;
- consumo real pelo storefront.
Modelo atual do dominio
O catalogo nao esta sendo montado como um JSON solto gigante.
Hoje ele combina:
- produto como entidade principal;
- categoria como estrutura de organizacao;
- colecao como agrupamento comercial;
- campos tipados para o nucleo operacional;
- JSON opcional para extensoes futuras.
Nucleo tipado
O que e critico para operacao e performance segue em campos claros:
- identificacao;
- status;
- disponibilidade;
- preco;
- estoque;
- fornecedor;
- dimensoes;
- atributos;
- variacoes;
- SEO;
- categorias;
- departamentos;
- colecoes.
Extensao controlada
Quando surge uma propriedade nova que ainda nao merece virar coluna fixa, o sistema usa:
customFieldsno produto;metadataem categoria;metadataem colecao.
Isso permite:
- continuar persistindo mesmo com campos vazios;
- inserir novos atributos sem quebrar a leitura do storefront;
- depois promover um campo para estrutura fixa, se ele virar parte obrigatoria do negocio.
Ordem de resolucao
Painel
- o admin lista produtos por
/api/ecommpanel/catalog/products; - cria ou atualiza por
POSTePUT; - faz o mesmo para categorias e colecoes;
- a operacao grava em arquivo, banco ou ambos, conforme o modo de persistencia.
Runtime do catalogo
O runtime do catalogo e a camada que fica entre painel e banco.
Ele concentra:
- normalizacao de dados;
- estrategia de persistencia;
- seed inicial do banco em modo
hybrid; - leitura consolidada para API publica;
- fallback quando o banco nao esta disponivel.
Em resumo: o painel nao escreve direto no storefront. Ele escreve no runtime do catalogo, e a loja le esse runtime pela API.
API publica
/api/v1/catalog/productsconsulta o runtime do catalogo;- aplica filtros, facets e paginacao;
- devolve envelope
v1com cache HTTP.
Storefront
- quando
NEXT_PUBLIC_DATA_SOURCE=app, a PLP consulta/api/v1/catalog/products; - a PDP consulta
/api/v1/catalog/products/[slug]; - se a API falhar, o frontend ainda consegue cair no fallback local.
Contrato atual
Escrita
- admin ->
/api/ecommpanel/catalog/* - rotas admin ->
catalogStore catalogStore-> arquivo, banco ou ambos
Escrita em modo demonstração
Quando a sessão autenticada for do perfil demo:
- admin ->
/api/ecommpanel/catalog/* - rotas admin ->
catalogStore catalogStore-> snapshot temporário daquela sessão
Nesse caso, o banco e os arquivos oficiais não são alterados.
Leitura
- loja ->
/api/v1/catalog/* - API publica ->
catalogStore catalogStore-> banco ou arquivo, conforme o modo
Isso significa que o contrato atual ja esta consolidado:
- painel e storefront nao implementam regras separadas;
- os dois passam pelo mesmo dominio;
- a loja recebe uma visao integra do que foi salvo.
Expansao atual do produto
O formulario administrativo do catalogo agora cobre mais camadas do produto:
- base comercial: nome, slug, SKU, marca, categorias e preco;
- estoque: saldo disponivel, reservado, entrada, seguranca, reposicao e flags de oversell/backorder;
- identificacao: GTIN, EAN, referencia interna, MPN, NCM, CEST e origem;
- fornecedor: id, nome, SKU no fornecedor e custo;
- dimensoes: peso, altura, largura e comprimento;
- atributos e variacoes: listas JSON controladas para SKU derivado e filtros comerciais.
Isso deixa o contrato mais proximo do que sera usado no modulo real de produto e estoque, sem obrigar uma migracao brusca do schema a cada novo detalhe operacional.
No modo demo, a mesma regra continua valendo, mas só dentro da sessão de demonstração. O storefront oficial permanece isolado.
Estado atual do cache
Hoje existe uma separacao intencional:
- a API publica envia
Cache-Control; - o storefront ainda consome com
no-storeem modoapp; - isso evita leitura velha durante a fase de consolidacao do banco.
Portanto:
- consistencia primeiro;
- cache forte depois, por camada de projecao.
Como isso deve evoluir
Quando o catalogo estiver mais maduro, a recomendacao e:
- banco como fonte de verdade;
- runtime administrativo escrevendo no banco;
- API publica lendo uma projecao otimizada;
- cache com invalidação por alteracao de produto, categoria, colecao, preco e estoque.
Arquivos e codigo principais
src/features/catalog/server/catalogStore.tssrc/features/catalog/server/catalogDatabaseStore.tssrc/app/api/ecommpanel/catalog/products/route.tssrc/app/api/ecommpanel/catalog/products/[productId]/route.tssrc/app/api/ecommpanel/catalog/categories/route.tssrc/app/api/ecommpanel/catalog/categories/[categoryId]/route.tssrc/app/api/ecommpanel/catalog/collections/route.tssrc/app/api/ecommpanel/catalog/collections/[collectionId]/route.tssrc/app/api/v1/catalog/products/route.tssrc/app/api/v1/catalog/products/[slug]/route.tssrc/app/api/v1/catalog/categories/route.tssrc/features/ecommerce/lib/plpDataSource.tssrc/features/ecommerce/lib/gatekeeper.ts
Por que isso importa
Essa mudanca cria a ponte que faltava:
- o painel passa a operar um produto real;
- a API publica passa a refletir esse produto;
- a loja passa a ler a mesma fonte;
- o catalogo fica pronto para sair do arquivo e consolidar em banco sem reescrever o storefront.
Proximas camadas do catalogo
Depois desta base, as proximas evolucoes naturais sao:
- familias e variacoes mais estruturadas;
- modulo de estoque transacional;
- precificacao promocional;
- promocoes, cupons e gift card.