# 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.
