Files
agenciapsilmno/database-novo/docs/setup_guide.md

7.0 KiB

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

# 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

docker ps | grep supabase_db

Deve mostrar o container com status Up.

3. Instalar o banco completo

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

node db.cjs status

Deve mostrar todos os counts verdes.

Backup

Criar backup manual

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

node db.cjs restore

Restaurar de uma data específica

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

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

node db.cjs status

Seeds (dados de teste)

Rodar todos os seeds

node db.cjs seed all        # ou simplesmente: node db.cjs seed

Rodar grupo específico

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

node db.cjs status

Mostra: container, backups, migrations aplicadas/pendentes, counts de todas as tabelas.

Comparar mudanças

node db.cjs diff

Compara o schema atual no banco com o último backup. Mostra tabelas adicionadas, removidas ou alteradas.

Verificar integridade

node db.cjs verify

Checa se os dados essenciais existem (plans, features, subscriptions, etc).

Reset completo

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"

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

node db.cjs reset

"Permission denied" / RLS bloqueando

Se features/plan_features estiverem vazios, o RLS bloqueia tudo. Rode:

node db.cjs seed system

Migration falhou no meio

# 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

node db.cjs reset

Isso apaga tudo, reaplica schema, fixes, seeds, e verifica.