Theme Builder
Temas da vitrine por seções: ajustes globais, definições de seção, modelos de página, cabeçalho, rodapé, blocos e publicação.
O Theme Builder monta a vitrine por seções, no estilo de lojas Shopify: o tema reúne ajustes globais (cores, fontes), tipos de seção reutilizáveis, um modelo por tipo de página (home, produto, carrinho...) e os grupos de cabeçalho e rodapé. O lojista escolhe e ordena seções, edita os campos delas e publica. Esta área é a API do editor de temas.
Como funciona
O tema é uma hierarquia: o tema tem definições de seção (os moldes), modelos (um por tipo de página) e grupos (header e footer). Modelos e grupos contêm seções (instâncias de uma definição), e as seções podem ter blocos filhos.
Estados do tema (campo status, uma letra):
| Letra | Nome | Significado |
|---|---|---|
R | draft | Rascunho: em construção, não pode ir ao ar. |
A | published | Publicado: pode ser colocado ao vivo. |
L | live | Estado ao vivo no vocabulário de status. O tema ao vivo é indicado por is_live: true. |
D | archived | Arquivado. |
Fluxo típico para lançar um tema novo:
- Parta de algo prontoCrie o tema inicial (
POST /themes/seed), duplique um tema existente ou importe um JSON exportado. - EditeSalve alterações como rascunho (
POST /themes/{id}/draft) ou use as rotas de seções e blocos diretamente. - ApliquePublique o rascunho (
POST /themes/{id}/draft/publish). - Publique o tema
POST /themes/{id}/publishmuda o estado paraA. - Coloque ao vivo
POST /themes/{id}/set-liveliga o tema à vitrine.
Conceitos-chave
Tipos de campo
Os esquemas (global_settings_schema, settings_schema) descrevem formulários. Cada campo tem key, type, label e default. Tipos: text, textarea, richtext, url, image, color, range, number, checkbox, select, collection, product. range e number aceitam min, max, step e unit; select traz options (label e value). O valor preenchido vai em settings_values (ou global_settings_values), indexado pela key.
Orçamento de desempenho
Ao publicar o tema ou o rascunho, o servidor pesa as imagens e scripts do rascunho. Violações de severidade error bloqueiam com 422 e a lista violations. ?force=true ignora; ?optimize=true recomprime as imagens automaticamente. Sem rascunho (ou sem arquivos), nada é bloqueado.
Quem edita o quê
As rotas desta seção são do painel do administrador. A leitura pública da página renderizada pela vitrine é outra rota, fora desta seção.
Erros 500 em vez de 400
Várias rotas não validam o formato do id nem os campos antes de gravar. Um id que não é UUID chega ao banco e volta como 500 com uma mensagem em português; uma violação de unicidade (slug ou page_type repetido) também. Valide no cliente.
Endpoints
| Método | Caminho | Para que serve | Página |
|---|---|---|---|
GET | /api/v1/admin/theme-builder/themes | Listar os temas | Temas |
GET | /api/v1/admin/theme-builder/themes/{id} | Obter um tema | Temas |
POST | /api/v1/admin/theme-builder/themes | Criar um tema vazio | Temas |
PUT | /api/v1/admin/theme-builder/themes/{id} | Atualizar dados do tema | Temas |
DELETE | /api/v1/admin/theme-builder/themes/{id} | Excluir um tema | Temas |
POST | /api/v1/admin/theme-builder/themes/{id}/duplicate | Duplicar um tema | Ciclo de vida do tema |
POST | /api/v1/admin/theme-builder/themes/seed | Criar o tema inicial padrão | Ciclo de vida do tema |
POST | /api/v1/admin/theme-builder/themes/{id}/publish | Publicar o tema | Ciclo de vida do tema |
POST | /api/v1/admin/theme-builder/themes/{id}/set-live | Colocar o tema ao vivo | Ciclo de vida do tema |
GET | /api/v1/admin/theme-builder/themes/{id}/export | Exportar um tema como JSON | Importar e exportar tema |
POST | /api/v1/admin/theme-builder/themes/import | Importar um tema exportado | Importar e exportar tema |
GET | /api/v1/admin/theme-builder/themes/{id}/draft | Obter o rascunho do tema | Rascunho do tema |
POST | /api/v1/admin/theme-builder/themes/{id}/draft | Salvar o rascunho do tema | Rascunho do tema |
POST | /api/v1/admin/theme-builder/themes/{id}/draft/publish | Aplicar o rascunho ao tema | Rascunho do tema |
DELETE | /api/v1/admin/theme-builder/themes/{id}/draft | Descartar o rascunho | Rascunho do tema |
GET | /api/v1/admin/theme-builder/themes/{id}/section-definitions | Listar as definições de seção do tema | Definições de seção |
POST | /api/v1/admin/theme-builder/themes/{id}/section-definitions | Criar uma definição de seção | Definições de seção |
PUT | /api/v1/admin/theme-builder/section-definitions/{id} | Atualizar uma definição de seção | Definições de seção |
DELETE | /api/v1/admin/theme-builder/section-definitions/{id} | Excluir uma definição de seção | Definições de seção |
GET | /api/v1/admin/theme-builder/themes/{id}/templates | Listar os modelos do tema | Modelos de página |
GET | /api/v1/admin/theme-builder/templates/{id} | Obter um modelo | Modelos de página |
POST | /api/v1/admin/theme-builder/themes/{id}/templates | Criar um modelo de página | Modelos de página |
PUT | /api/v1/admin/theme-builder/templates/{id} | Atualizar nome e SEO do modelo | Modelos de página |
PUT | /api/v1/admin/theme-builder/templates/{id}/sections | Substituir todas as seções do modelo | Modelos de página |
GET | /api/v1/admin/theme-builder/themes/{id}/groups | Listar os grupos do tema | Grupos de cabeçalho e rodapé |
PUT | /api/v1/admin/theme-builder/themes/{themeId}/groups/{groupId} | Substituir todas as seções de um grupo | Grupos de cabeçalho e rodapé |
GET | /api/v1/admin/theme-builder/template-sections | Listar as seções de um modelo ou grupo | Seções do modelo |
POST | /api/v1/admin/theme-builder/template-sections | Inserir uma seção | Seções do modelo |
PUT | /api/v1/admin/theme-builder/template-sections/{id} | Atualizar os valores de uma seção | Seções do modelo |
DELETE | /api/v1/admin/theme-builder/template-sections/{id} | Remover uma seção | Seções do modelo |
PUT | /api/v1/admin/theme-builder/template-sections/reorder | Reordenar seções | Ordem e visibilidade das seções |
PUT | /api/v1/admin/theme-builder/template-sections/{id}/toggle | Alternar a visibilidade de uma seção | Ordem e visibilidade das seções |
GET | /api/v1/admin/theme-builder/template-sections/{id}/blocks | Listar os blocos de uma seção | Blocos da seção |
POST | /api/v1/admin/theme-builder/template-sections/{id}/blocks | Adicionar um bloco a uma seção | Blocos da seção |
PUT | /api/v1/admin/theme-builder/blocks/{id} | Atualizar os valores de um bloco | Blocos da seção |
DELETE | /api/v1/admin/theme-builder/blocks/{id} | Remover um bloco | Blocos da seção |
PUT | /api/v1/admin/theme-builder/template-sections/{id}/blocks/reorder | Reordenar os blocos de uma seção | Blocos da seção |
Erros comuns
- Chamar
set-livenum tema que não foi publicado. Devolve500comonly published themes can be set as live. - Tentar excluir o tema ao vivo (
500,cannot delete the live theme). Coloque outro ao vivo antes. - Usar
PUT /templates/{id}/sectionsouPUT /themes/{themeId}/groups/{groupId}com seções que têm blocos. Os blocos são apagados e não recriados. - Criar uma definição de seção sem
slug. O servidor só confere onamee responde500. - Guardar ids de seções e blocos em outro sistema: a publicação do rascunho os recria.
- Repetir
togglepor retentativa automática: cada chamada inverte a visibilidade. - Tratar
statuscomo texto longo. A resposta traz a letra (A), mesmo que você tenha enviadopublished.