Refatorar as migrations para a DSL do Rails
TLDR: Reescrever todas as migrations que usavam SQL cru em
executepara a DSL do ActiveRecord (create_table,add_index,add_check_constraint).
Contexto
As 23 migrations foram escritas com execute <<~SQL, ou seja, SQL cru. O projeto segue convenções inspiradas em Rails, então as migrations deveriam usar a DSL do ActiveRecord (create_table, t.string, add_index) por legibilidade e portabilidade entre bancos. execute deve ficar reservado só para o que a DSL não consegue expressar.
Objetivos
Substituir SQL cru pela DSL, conforme a tabela:
| Assunto | Antes | Depois |
|---|---|---|
| Criação de tabela | execute "CREATE TABLE ..." |
create_table :name, options do \|t\| |
| Índices | execute "CREATE INDEX ..." |
add_index :table, :column |
| Check constraints | SQL inline | t.check_constraint / add_check_constraint |
| Sequences customizadas (não-PK) | execute "CREATE SEQUENCE ..." |
t.serial :id (sequence automática do PostgreSQL) |
| Criação de schema | execute "CREATE SCHEMA ..." |
mantém execute (não há equivalente na DSL) |
| Tabela com prefixo de schema | — | create_table "latam.table" (o adapter do PG suporta) |
Fora de escopo
Restrições que delimitam a refatoração:
executefica apenas para: criação de schema, índices parciais com cláusulaWHERE, e índices únicos funcionais- Chaves primárias compostas usam
primary_key: [:col1, :col2] - PKs não convencionais (text/varchar) usam
primary_key: :col, id: :string/:text - Tabelas sem chave primária:
id: false+t.primary_keyexplícito
Mudanças
Todos os 23 arquivos de leads/db/migrate/.
Como verificar
bash
make leads.db.create
make leads.db.migrate
make leads.db.rollback # conferir por amostragem
Documentação
— (não registrado na spec original)