# BAAS-CONTROL-PLANE O `baas-control-plane` é o orquestrador central para provisionamento e gestão de múltiplos backends-as-a-service (BaaS), como Appwrite e Supabase, oferecendo uma camada unificada de abstração para multi-tenancy. ## 📋 Visão Geral Este serviço não armazena dados de negócio, mas sim metadados sobre tenants, projetos e recursos. Ele atua como um "plano de controle" que delega a criação de infraestrutura para drivers ou provedores específicos. ### Arquitetura ```mermaid graph TD Client[Dashboard / CLI] -->|HTTP REST| API[Control Plane API] subgraph Core Services API --> Provisioning[Provisioning Service] API --> Schema[Schema Sync] API --> Secrets[Secrets Manager] API --> Audit[Audit Logger] end subgraph Providers Provisioning -->|Driver Interface| Appwrite[Appwrite Provider] Provisioning -->|Driver Interface| Supabase[Supabase Provider] end Appwrite -->|API| AWS_Appwrite[Appwrite Instance] Supabase -->|API| AWS_Supabase[Supabase Hosting] API --> DB[(Metadata DB)] ``` ## 🚀 Estrutura do Projeto O projeto segue uma arquitetura modular baseada em **Fastify**: | Diretório | Responsabilidade | | :--- | :--- | | `src/core` | Configurações globais, plugins do Fastify e tratamento de erros. | | `src/modules` | Domínios funcionais (Tenants, Projects, etc.). | | `src/providers` | Implementações dos drivers para cada BaaS suportado. | | `src/lib` | Utilitários compartilhados. | | `docs/` | Documentação arquitetural detalhada. | ## 🛠️ Tecnologias e Otimizações - **Backend**: Node.js 20 + Fastify (Alta performance) - **Linguagem**: TypeScript - **Validação**: Zod - **Containerização**: - Baseada em `gcr.io/distroless/nodejs20-debian12`. - Multi-stage build para separação de dependências. - Segurança reforçada (sem shell, usuário non-root). ## 💻 Como Executar ### Docker (Recomendado) ```bash docker-compose up --build ``` A API estará disponível na porta `4000`. ### Desenvolvimento Local 1. **Instale as dependências:** ```bash npm install ``` 2. **Configure o ambiente:** ```bash cp .env.example .env ``` 3. **Execute em modo watch:** ```bash npm run dev ``` ## 🔌 Fluxos Principais 1. **Criar Tenant**: Registra uma nova organização no sistema. 2. **Criar Projeto**: Vincula um Tenant a um Provider (ex: Projeto "Marketing" no Appwrite). 3. **Provisionar**: O Control Plane chama a API do Provider para criar bancos de dados, buckets e funções. 4. **Schema Sync**: Aplica definições de coleção/tabela do sistema de forma agnóstica ao provider. ## 🔧 Detalhes do Dockerfile O `Dockerfile` é otimizado para produção e segurança: - **Builder**: Compila o TypeScript. - **Prod Deps**: Instala apenas pacotes necessários para execução (`--omit=dev`). - **Runtime (Distroless)**: Imagem final minúscula contendo apenas o runtime Node.js e os arquivos da aplicação.