{"id":"repo/fastapp-schema","source":"repo","sourceLabel":"repository root","sourcePath":"FASTAPP_SCHEMA.md","routePath":"/fastapp/public-docs/page/repo/fastapp-schema","rawPath":"/fastapp/public-docs/raw/repo/fastapp-schema","slug":["repo","fastapp-schema"],"slugPath":"repo/fastapp-schema","title":"📄 FASTAPP SCHEMA — Ciclo de Vida do Esquema","description":"O esquema do Fastapp existe em dois estados: Dinâmico (Banco de Dados) e Estático (Sistema de Arquivos) . Esta dualidade garante agilidade no desenvolvimento e robustez em produção.","headings":["📄 FASTAPP SCHEMA — Ciclo de Vida do Esquema","1. Esquema Dinâmico (Primary Source)","2. Esquema Estático (Snapshot)","🔄 Fluxo de Evolução","📐 Estrutura Técnia (V3)","📦 ObjectSchema","🔗 RelationSchema","🛠️ Custom Actions"],"wordCount":293,"markdown":"# 📄 FASTAPP SCHEMA — Ciclo de Vida do Esquema\r\n\r\nO esquema do Fastapp existe em dois estados: **Dinâmico (Banco de Dados)** e **Estático (Sistema de Arquivos)**. Esta dualidade garante agilidade no desenvolvimento e robustez em produção.\r\n\r\n---\r\n\r\n## 1. Esquema Dinâmico (Primary Source)\r\n- **Local**: Tabela `app` no PostgreSQL.\r\n- **Edição**: Feita via Schema Manager v3 ou API.\r\n- **Uso**: Ferramenta de No-Code para design-time.\r\n\r\n## 2. Esquema Estático (Snapshot)\r\n- **Local**: `app/fastapp/static-manifest.ts`.\r\n- **Geração**: Via endpoint de Snapshot.\r\n- **Uso**: Carregamento instantâneo em produção, versionamento Git e segurança contra falhas de conexão com o banco.\r\n\r\n---\r\n\r\n## 🔄 Fluxo de Evolução\r\n\r\n1.  **Iteração**: O Arquiteto IA ou o Dev edita o Esquema Dinâmico.\r\n2.  **Validação**: Teste das mudanças em tempo real na aba de aplicativos.\r\n3.  **Congelamento**: Geração do Snapshot para \"pergelar\" a versão estável.\r\n4.  **Sincronia**: Notificação do Protocolo Fadap para ajustar o banco físico (DDL).\r\n\r\n---\r\n\r\n## 📐 Estrutura Técnia (V3)\r\n\r\nO esquema é definido por interfaces TypeScript que governam a renderização e o comportamento.\r\n\r\n### 📦 ObjectSchema\r\nDefine a entidade principal e seu comportamento de CRUD.\r\n- `crud_mode`: `'modal' | 'sidebar' | 'page' | 'split'`.\r\n- `detail_mode`: `'sidebar' | 'modal' | 'page'`.\r\n- `group_render_mode`: `'tabs' | 'wizard' | 'sections'`. (Define como `property_groups` são exibidos).\r\n\r\n### 🔗 RelationSchema\r\nDefine como os objetos se conectam e como o CRUD filho é orquestrado.\r\n- `nested_crud`: `boolean`. Habilita a aba de CRUD para o objeto alvo.\r\n- `nested_view_mode`: `'table' | 'kanban' | 'list' | 'grid'`. Define a visualização padrão na aba.\r\n- `ui_visibility`: `boolean | 'hidden' | 'visible'`. Controla se a relação aparece nos menus/exploradores automáticos.\r\n- `storage`: `'reference_id' | 'document_embed' | 'pivot'`.\r\n\r\n---\r\n\r\n## 🛠️ Custom Actions\r\n\r\nO esquema também define o comportamento de ações customizadas. Quando uma ação (ex: `Gerar Relatório`) é declarada no objeto:\r\n1.  O metadado registra a intenção e o ícone.\r\n2.  O motor busca a implementação correspondente no diretório de handlers Nitro (`server/api/v1/actions/...`).\r\n\r\n---\r\n\r\n> \"O esquema é o contrato entre a intenção do negócio e a execução do software.\"\r\n"}