Appearance
Migrations
O banco é gerenciado via Prisma Migrate. As migrations ficam em backend/prisma/migrations/.
Fluxo de desenvolvimento
1. Alterar o schema
Editar backend/prisma/schema.prisma.
2. Criar a migration
bash
cd backend
npx prisma migrate dev --name descricao_da_mudancaEsse comando:
- Gera o arquivo SQL em
prisma/migrations/YYYYMMDDHHMMSS_descricao/migration.sql - Aplica a migration no banco de desenvolvimento
- Regenera o Prisma Client
3. Aplicar em produção
As migrations são aplicadas automaticamente pelo entrypoint do container backend ao iniciar:
dockerfile
# Dockerfile do backend
CMD ["sh", "-c", "npx prisma migrate deploy && node dist/main.js"]prisma migrate deploy aplica todas as migrations pendentes. É idempotente — não reaplica migrations já executadas.
Convenções de nomeamento
add_campo_na_tabela — novo campo
remove_campo_da_tabela — remoção de campo
create_tabela — nova tabela
rename_campo — renomear campo
add_index_tabela_campo — novo índice
alter_tipo_campo — mudança de tipoMigrations de alto risco
Adicionar coluna NOT NULL em tabela grande
sql
-- NÃO fazer assim (bloqueia tabela):
ALTER TABLE "Customer" ADD COLUMN "newField" TEXT NOT NULL;
-- Fazer em 3 passos:
-- 1. Adicionar nullable
ALTER TABLE "Customer" ADD COLUMN "newField" TEXT;
-- 2. Backfill
UPDATE "Customer" SET "newField" = 'default_value' WHERE "newField" IS NULL;
-- 3. Adicionar constraint (em janela de manutenção)
ALTER TABLE "Customer" ALTER COLUMN "newField" SET NOT NULL;Renomear coluna
sql
-- Prisma NÃO detecta rename automaticamente — interpreta como drop+add.
-- Para renomear sem perder dados, editar a migration gerada manualmente:
ALTER TABLE "Customer" RENAME COLUMN "oldName" TO "newName";
-- Remover o DROP COLUMN e ADD COLUMN que o Prisma gerou.Verificar status das migrations
bash
# Quais migrations foram aplicadas
npx prisma migrate status
# Via psql direto
SELECT migration_name, started_at, finished_at
FROM "_prisma_migrations"
ORDER BY started_at DESC
LIMIT 20;Rollback
Prisma Migrate não tem rollback automático. Para desfazer uma migration em produção:
- Escrever migration de rollback manual (inverso da migration aplicada)
- Testar em ambiente local
- Aplicar via
npx prisma migrate deploy
Para drops acidentais: restaurar do backup do PostgreSQL (ver Rollback).
Backup antes de migrations de risco
bash
# Fazer dump antes de migration destrutiva
docker exec crm-galdix-postgres-1 \
pg_dump -U $POSTGRES_USER $POSTGRES_DB \
> backup_$(date +%Y%m%d_%H%M%S).sqlEstrutura dos arquivos de migration
backend/prisma/migrations/
├── 20250101000000_init/
│ └── migration.sql
├── 20250215143022_add_whatsapp_pricing/
│ └── migration.sql
├── 20250301120000_add_post_sale_survey/
│ └── migration.sql
└── migration_lock.toml # versão do provider — não editar manualmente