Arquitetura
Serviços
| Serviço | Porta | Descrição |
|---|---|---|
| CMS API | :3000 | CRUD de sites, pages, menus, templates, blocks, media, posts, etc. |
| Renderer | :3001 | SSR de páginas publicadas — resolve domínio → site → page → HTML |
| Editor | :4400 | React 19 + Puck — editor visual embarcado via iframe |
| CMS Web | :4200 | Angular 21 — dashboard admin do site builder |
| Media | — | Upload/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étodo | Rota padrão | Descrição |
|---|---|---|
| GET | /health | Health check |
| GET | /sites | Lista sites do tenant |
| GET | /sites/:siteId/pages | Páginas de um site |
| POST | /sites/:siteId/pages | Cria página |
| PUT | /pages/:id | Atualiza página |
| GET | /sites/:siteId/menus | Menus de um site |
| GET | /templates | Lista templates |
| POST | /medias/upload | Upload de media (multipart) |
Renderer (:3001)
Serviço de SSR que renderiza páginas publicadas. Fluxo:
- Resolve domínio customizado ou slug para o site
- Busca a page correspondente à rota
- Renderiza via React (componentes Puck) para HTML
- 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:
| Mensagem | Direção | Descrição |
|---|---|---|
puck:load | Angular → React | Envia dados da página ao editor |
puck:ready | React → Angular | Editor pronto para receber dados |
puck:publish | React → Angular | Usuário publicou a página |