Refatorar as migrations para a DSL do Rails

TLDR: Reescrever todas as migrations que usavam SQL cru em execute para 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:

  • execute fica apenas para: criação de schema, índices parciais com cláusula WHERE, 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_key explí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)