Pular para o conteúdo principal

Arquitetura

Serviços

ServiçoPortaDescrição
CMS API:3000CRUD de sites, pages, menus, templates, blocks, media, posts, etc.
Renderer:3001SSR de páginas publicadas — resolve domínio → site → page → HTML
Editor:4400React 19 + Puck — editor visual embarcado via iframe
CMS Web:4200Angular 21 — dashboard admin do site builder
MediaUpload/serve de media do tenant (imagens, vídeos, PDFs)

Gestão de tenants ficou em Tenant API (BC dedicado, banco public).

CMS API (:3000)

API REST Fastify para gestão dos domínios do CMS. Multi-tenant com RLS — header X-Tenant-ID obrigatório em todas as requests (exceto /health).

Domínios: sites, pages, menus, templates, blocks, media, posts, offers, forms, lists, locations.

Media via MinIO/S3 (upload multipart, 10MB max).

Endpoints

Rotas geradas a partir de cms/schemas/*.yaml — ver Schema Generator. Cada domínio expõe as actions declaradas no YAML.

MétodoRota padrãoDescrição
GET/healthHealth check
GET/sitesLista sites do tenant
GET/sites/:siteId/pagesPáginas de um site
POST/sites/:siteId/pagesCria página
PUT/pages/:idAtualiza página
GET/sites/:siteId/menusMenus de um site
GET/templatesLista templates
POST/medias/uploadUpload de media (multipart)

Renderer (:3001)

Serviço de SSR que renderiza páginas publicadas. Fluxo:

  1. Resolve domínio customizado ou slug para o site
  2. Busca a page correspondente à rota
  3. Renderiza via React (componentes Puck) para HTML
  4. Cache Redis com TTL de 60s

Editor (cms/editor)

Editor visual React 19 + Puck embarcado no dashboard Angular via iframe. Comunicação bidirecional via postMessage:

MensagemDireçãoDescrição
puck:loadAngular → ReactEnvia dados da página ao editor
puck:readyReact → AngularEditor pronto para receber dados
puck:publishReact → AngularUsuário publicou a página