From c7da1e20402e59135282eb804d519b4f024ca950 Mon Sep 17 00:00:00 2001 From: Rafael Alves Lopes Date: Wed, 27 May 2026 16:48:34 -0300 Subject: [PATCH] Adicionar Database --- Database.md | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 Database.md diff --git a/Database.md b/Database.md new file mode 100644 index 0000000..584f6b2 --- /dev/null +++ b/Database.md @@ -0,0 +1,89 @@ +# Banco de Dados e Migrations + +## Decisao atual + +O banco nao deve subir pelo `docker-compose.yml` deste projeto, nem em desenvolvimento, nem em teste. + +O compose sobe apenas: + +- backend; +- frontend. + +O PostgreSQL deve ser provisionado fora do compose: instancia local, VM, container separado, banco corporativo ou servico gerenciado. + +## Estrutura + +As migrations ficam em: + +```txt +database/migrations +``` + +Elas criam/evoluem as tabelas principais: + +- usuarios, provedores, perfis e auditoria; +- areas e vinculos usuario/area; +- atribuicoes WhatsApp; +- templates; +- notas do agente; +- contatos/agenda; +- presenca do agente; +- keywords e fluxo do bot; +- conteudos da IA; +- categorias e campos extras. + +## As migrations refletem o banco atual? + +Elas parecem refletir boa parte do schema atual porque: + +- cobrem as tabelas usadas pelo codigo; +- usam `CREATE TABLE IF NOT EXISTS` e `ALTER TABLE ... ADD COLUMN IF NOT EXISTS`; +- incluem ate `023_agenda_contact_channels.sql`, com campos recentes da agenda. + +Mas nao da para garantir 100% sem comparar contra o schema real do PostgreSQL de desenvolvimento. Alem disso, alguns services ainda executam criacao/ajuste de schema em `onModuleInit()`, o que pode mascarar ausencia de migration formal. + +## Como aplicar migrations hoje + +Exemplo Linux/macOS: + +```bash +for file in database/migrations/*.sql; do + psql "postgresql://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME" -f "$file" +done +``` + +Exemplo PowerShell: + +```powershell +Get-ChildItem database\migrations\*.sql | Sort-Object Name | ForEach-Object { + psql "postgresql://$env:DB_USER`:$env:DB_PASSWORD@$env:DB_HOST`:$env:DB_PORT/$env:DB_NAME" -f $_.FullName +} +``` + +## Recomendacao para producao + +Criar um runner formal de migrations, por exemplo: + +- script Node usando `pg`; +- tabela `schema_migrations`; +- execucao ordenada por nome do arquivo; +- registro de sucesso/falha; +- comando `npm run migrate`. + +## Backup + +Backup: + +```bash +pg_dump "postgresql://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME" > backup-omnichannel.sql +``` + +Restore: + +```bash +psql "postgresql://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME" < backup-omnichannel.sql +``` + +## Conclusao + +O modelo desejado e correto: banco externo e migrations como fonte de verdade do schema. O ponto pendente e automatizar a aplicacao das migrations em ordem para que uma VM nova fique pronta de forma reproduzivel.