298 lines
7.0 KiB
Markdown
298 lines
7.0 KiB
Markdown
# 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.
|