Remover o model Agreement — Plano de implementação
TLDR: apaga o código do
Agreemente depois dropa a tabelaagreementscom uma migration irreversível.
Spec:
.project/docs/specs/20260928152046_remove_agreement_model.mdBranch:feat/remove-agreement
Arquitetura: remoção pura, sem comportamento novo — não há teste RED a escrever. A rede de segurança é a suíte existente (baseline: 346 runs, 0 failures) mais um grep que precisa zerar. Primeiro sai o código (a tabela ainda existe, então tudo continua verde); depois sai a tabela.
Stack: Rails 8.1, Minitest com fixtures YAML, PostgreSQL.
Restrições globais
- Testes rodam com
bin/rails tde dentro demodules/backend/— nunca viamake. - A migration original
20260724120700_create_agreements.rbnão é tocada. drop_tablesem bloco — irreversível por decisão explícita.
Todos os caminhos e comandos abaixo são relativos a modules/backend/.
Task 1: Remover o código do Agreement
Files:
- Delete: app/models/agreement.rb
- Delete: test/models/agreement_test.rb
- Delete: test/fixtures/agreements.yml
- Modify: app/models/negotiation.rb
- Modify: app/models/user.rb
- Modify: app/models/debit.rb
- Modify: test/models/debit_test.rb
- Modify: db/seeds.rb
Interfaces:
- Consumes: nada.
- Produces: nenhuma referência a Agreement / agreement(s) fora de db/.
- [ ] Step 1: Confirmar as referências (estado “RED”)
bash
grep -rni agreement app test db/seeds.rb
Expected: hits em agreement.rb, negotiation.rb, user.rb, debit.rb, agreement_test.rb, agreements.yml, debit_test.rb, seeds.rb.
- [ ] Step 2: Apagar arquivos
bash
git rm app/models/agreement.rb test/models/agreement_test.rb test/fixtures/agreements.yml
- [ ] Step 3: Remover associações
app/models/negotiation.rb — remover a linha:
ruby
has_one :agreement, dependent: :destroy
app/models/user.rb — remover:
ruby
has_many :approved_agreements, class_name: "Agreement", foreign_key: :approved_by_id,
inverse_of: :approved_by, dependent: :nullify
app/models/debit.rb — remover:
ruby
has_many :agreements, through: :negotiations
- [ ] Step 4: Remover o teste de associação em
test/models/debit_test.rb
Remover o teste inteiro test "reaches its agreements through the negotiations" do ... end e a linha em branco seguinte. Se o comentário # --- associations --- ficar sem nenhum teste abaixo, removê-lo também.
- [ ] Step 5: Remover o bloco do seed em
db/seeds.rb
```ruby puts “\n— Agreement —” puts “Total: #{Agreement.count}”
```
- [ ] Step 6: Verificar
bash
grep -rni agreement app test db/seeds.rb
bin/rails t
bundle exec rubocop
Expected: grep sem saída; suíte com 0 failures/0 errors (menos runs que a baseline de 346 — saem o teste do debit_test e os de agreement_test.rb); rubocop sem offenses.
- [ ] Step 7: Commit
bash
git add -A app test db/seeds.rb
git commit -m "refactor: remove model Agreement"
Task 2: Dropar a tabela agreements
Files:
- Create: db/migrate/<timestamp>_drop_agreements.rb
- Modify: db/schema.rb (regenerado)
Interfaces:
- Consumes: Task 1 (nenhum código referencia a tabela).
- Produces: schema.rb sem agreements.
- [ ] Step 1: Gerar a migration
bash
bin/rails g migration DropAgreements
Conteúdo:
ruby
class DropAgreements < ActiveRecord::Migration[8.1]
def change
drop_table :agreements
end
end
- [ ] Step 2: Rodar a migration
bash
bin/rails db:migrate
Expected: drop_table(:agreements) sem erro; schema.rb perde create_table "agreements" e os dois add_foreign_key "agreements", ..., e a versão sobe para o timestamp da nova migration.
- [ ] Step 3: Verificar
bash
grep -n agreements db/schema.rb
grep -rni agreement app test db/seeds.rb
bin/rails t
bin/rails db:seed
Expected: os dois grep sem saída; suíte com 0 failures/0 errors; seed sem erro.
- [ ] Step 4: Commit
bash
git add db/migrate db/schema.rb
git commit -m "refactor: drop tabela agreements"