# Guia de Instalação e Uso — AgenciaPsi Database ## Pré-requisitos 1. **Docker Desktop** instalado e rodando 2. **Node.js** 18+ instalado 3. **Supabase CLI** instalado (`npm install -g supabase`) ## Instalação do Zero (banco vazio) ### 1. Iniciar o Supabase ```bash # Na raiz do projeto (agenciapsi-primesakai/) npx supabase start ``` Aguarde até o container `supabase_db_agenciapsi-primesakai` estar rodando. ### 2. Verificar se o container está ok ```bash docker ps | grep supabase_db ``` Deve mostrar o container com status `Up`. ### 3. Instalar o banco completo ```bash cd database-novo node db.cjs setup ``` Isso faz tudo automaticamente: - Aplica o schema completo (84 tabelas, funções, triggers, policies) - Aplica os 7 fixes conhecidos - Cria os 11 usuários de teste - Cria os 7 planos + 4 preços - Cria as 26 features + 85 vínculos plano↔feature - Cria as 9 subscriptions + compromissos determinados - Cria os templates de email, notificação e carousel - Cria backup automático pós-instalação - Verifica integridade no final ### 4. Verificar ```bash node db.cjs status ``` Deve mostrar todos os counts verdes. ## Backup ### Criar backup manual ```bash node db.cjs backup ``` Salva em `backups/YYYY-MM-DD/` com 3 arquivos: - `schema.sql` — estrutura do banco - `data.sql` — dados (sem schemas de infra) - `full_dump.sql` — tudo junto ### Backup automático O backup é feito automaticamente: - Após o `setup` - Antes de cada `migrate` - Antes de cada `restore` - Antes de cada `reset` ### Retenção Backups com mais de 30 dias são removidos automaticamente. Para alterar, edite `backupRetentionDays` no `db.config.json`. ## Restaurar o Banco ### Restaurar do último backup ```bash node db.cjs restore ``` ### Restaurar de uma data específica ```bash node db.cjs restore 2026-03-23 ``` O restore: 1. Cria backup de segurança do estado atual 2. Limpa o schema public 3. Aplica o full_dump.sql do backup 4. Verifica integridade ## Migrations (alterações no banco) ### Criar uma migration Crie um arquivo SQL na pasta `migrations/` com nome sequencial: ``` migrations/ ├── 001_add_column_x.sql ├── 002_create_table_y.sql └── 003_fix_something.sql ``` O nome deve começar com número para garantir a ordem. ### Aplicar migrations pendentes ```bash node db.cjs migrate ``` O CLI: 1. Cria backup automático 2. Compara com a tabela `_db_migrations` no banco 3. Aplica apenas as que ainda não foram executadas 4. Registra cada migration aplicada 5. Se uma falhar, para imediatamente (use `restore` para voltar) ### Ver migrations aplicadas ```bash node db.cjs status ``` ## Seeds (dados de teste) ### Rodar todos os seeds ```bash node db.cjs seed all # ou simplesmente: node db.cjs seed ``` ### Rodar grupo específico ```bash node db.cjs seed users # Apenas usuários (seed_001 a 003) node db.cjs seed system # Apenas sistema (seed_010 a 014) node db.cjs seed test_data # Dados de teste (seed_020) ``` ### Ordem dos seeds | # | Arquivo | O que faz | |---|---------|-----------| | 1 | `seed_001_fixed.sql` | 6 usuários base + tenants | | 2 | `seed_002.sql` | Supervisor + Editor | | 3 | `seed_003.sql` | Therapist2, Therapist3, Secretary | | 4 | `seed_010_plans.sql` | 7 planos + 4 preços | | 5 | `seed_011_features.sql` | 26 features | | 6 | `seed_012_plan_features.sql` | 85 vínculos plano↔feature | | 7 | `seed_013_subscriptions.sql` | 9 subscriptions + compromissos | | 8 | `seed_014_global_data.sql` | Templates + carousel | ## Outros Comandos ### Ver status ```bash node db.cjs status ``` Mostra: container, backups, migrations aplicadas/pendentes, counts de todas as tabelas. ### Comparar mudanças ```bash node db.cjs diff ``` Compara o schema atual no banco com o último backup. Mostra tabelas adicionadas, removidas ou alteradas. ### Verificar integridade ```bash node db.cjs verify ``` Checa se os dados essenciais existem (plans, features, subscriptions, etc). ### Reset completo ```bash node db.cjs reset ``` **⚠ CUIDADO**: Apaga tudo e reinstala do zero. Cria backup antes. ## Estrutura de Pastas ``` database-novo/ ├── db.js ← CLI principal ├── db.config.json ← Configuração (container, seeds, fixes) │ ├── schema/ ← Schema SQL separado por seção │ ├── 00_full/ ← Schema completo (referência) │ ├── 01_extensions/ ← Extensões PostgreSQL │ ├── 02_types/ ← Enums e tipos │ ├── 03_functions/ ← Funções (11 arquivos por domínio) │ ├── 04_tables/ ← Tabelas (10 arquivos por domínio) │ ├── 05_views/ ← 24 views │ ├── 06_indexes/ ← Índices │ ├── 07_foreign_keys/ ← PKs, FKs, constraints │ ├── 08_triggers/ ← Triggers │ ├── 09_policies/ ← 217 RLS policies │ └── 10_grants/ ← Grants │ ├── seeds/ ← Seeds de dados │ ├── seed_001_fixed.sql │ ├── ... │ └── run_all_seeds.sh │ ├── migrations/ ← Migrations (alterações incrementais) │ ├── fixes/ ← Correções aplicadas │ ├── backups/ ← Backups com data │ ├── 2026-03-23/ │ └── ... │ └── docs/ ← Documentação ├── setup_guide.md ← Este arquivo ├── schema_map.md ← Mapa de 84 tabelas ├── business_rules.md ← Regras de negócio └── users_test.md ← Usuários de teste ``` ## Credenciais de Teste | Email | Senha | Tipo | |-------|-------|------| | paciente@agenciapsi.com.br | Teste@123 | Paciente | | terapeuta@agenciapsi.com.br | Teste@123 | Terapeuta solo | | clinica1@agenciapsi.com.br | Teste@123 | Clínica coworking | | clinica2@agenciapsi.com.br | Teste@123 | Clínica recepção | | clinica3@agenciapsi.com.br | Teste@123 | Clínica full | | saas@agenciapsi.com.br | Teste@123 | Admin plataforma | | supervisor@agenciapsi.com.br | Teste@123 | Supervisor | | editor@agenciapsi.com.br | Teste@123 | Editor | | therapist2@agenciapsi.com.br | Teste@123 | Terapeuta | | therapist3@agenciapsi.com.br | Teste@123 | Terapeuta | | secretary@agenciapsi.com.br | Teste@123 | Secretária | ## Troubleshooting ### "Container não está rodando" ```bash # Verificar docker ps | grep supabase # Reiniciar npx supabase stop npx supabase start ``` ### "Tabela não existe" após setup O schema pode não ter sido aplicado corretamente. Rode: ```bash node db.cjs reset ``` ### "Permission denied" / RLS bloqueando Se features/plan_features estiverem vazios, o RLS bloqueia tudo. Rode: ```bash node db.cjs seed system ``` ### Migration falhou no meio ```bash # Voltar ao estado anterior node db.cjs restore # Corrigir o SQL da migration, depois tentar de novo node db.cjs migrate ``` ### Quero começar do zero ```bash node db.cjs reset ``` Isso apaga tudo, reaplica schema, fixes, seeds, e verifica.