Issue 0001#1
Conversation
…rce one device per role per vehicle
📝 WalkthroughWalkthroughAdiciona uma restrição de unicidade para o par (vehicle_id, role) na tabela installations, via migração de índice único e constraint no changeset com mensagem customizada, acompanhada de teste de regressão e documentação (issue, investigação e três ADRs) descrevendo o problema, alternativas e decisões. ChangesCorreção de unicidade de função por veículo
Estimated code review effort: 2 (Simple) | ~12 minutes Sequence Diagram(s)Não aplicável — as mudanças são majoritariamente documentação, uma migração de banco e uma constraint simples de changeset, sem fluxo de múltiplos componentes que justifique um diagrama. Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
test/caduceus/installations_test.exs (1)
29-53: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winAdicione cobertura para a função
:identifiere verifique o estado do device após falha.O critério de aceite exige que a trava valha para ambas as funções (
positioneidentifier), mas o teste só cobre:position. Além disso, considere verificar quedevice_bpermanece:ready_to_installapós a falha, garantindo que o rollback da transaçãoMultifuncionou corretamente.# Sugestão de teste adicional para :identifier test "não permite dois dispositivos na mesma função identifier do mesmo veículo" do # ... setup similar, com role: :identifier endOu parametrizar o teste:
for role <- [:position, :identifier] do `@tag` role: role test "não permite dois dispositivos na mesma função #{role} do mesmo veículo", %{role: role} do # ... corpo do teste usando role end end🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/caduceus/installations_test.exs` around lines 29 - 53, The current test only exercises the duplicate-role constraint for :position, so extend the coverage in installations_test.exs to also validate :identifier using Installations.install_device and the same vehicle/device setup. Use the existing test as a template and either add a second test or parameterize it over both roles, then assert the expected role error for each case. Also verify after the failed second install that device_b remains :ready_to_install by checking its persisted status, ensuring the Multi rollback behavior is covered.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@test/caduceus/installations_test.exs`:
- Around line 29-53: The current test only exercises the duplicate-role
constraint for :position, so extend the coverage in installations_test.exs to
also validate :identifier using Installations.install_device and the same
vehicle/device setup. Use the existing test as a template and either add a
second test or parameterize it over both roles, then assert the expected role
error for each case. Also verify after the failed second install that device_b
remains :ready_to_install by checking its persisted status, ensuring the Multi
rollback behavior is covered.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 14520e39-3363-4b25-9cf2-6d7506cfd0e7
📒 Files selected for processing (8)
docs/issues/issue-001/adr-0001.mddocs/issues/issue-001/adr-0002.mddocs/issues/issue-001/adr-0003.mddocs/issues/issue-001/investigation.mddocs/issues/issue-001/issue.mdlib/caduceus/installations/installation.expriv/repo/migrations/20260701012457_add_unique_index_on_installations_vehicle_role.exstest/caduceus/installations_test.exs
Unicidade de dispositivo por função em cada veículo
Contexto
O time de operações relatou que instalou dois dispositivos exercendo a mesma função em um mesmo veículo, e o sistema permitiu.
Ao ser instalado em um veículo, um dispositivo assume uma função: posição (GPS) ou identificação do motorista. Cada função deve ser exercida por um único dispositivo em cada veículo.
O sistema não impõe essa regra em nenhum ponto, então nada impede uma segunda instalação numa função já ocupada.
O que este PR faz
Detalhes de implementação
unique_index [:vehicle_id, :role]na tabelainstallationsvia migration. É a trava real: rejeita a duplicata de forma atômica, resistente a concorrência.unique_constraintno changeset da instalação, convertendo a violação do índice em erro de validação em vez de exceção.unique_constraintno camporolecom mensagem customizada, em vez do default que apontariavehicle_id. É uma exemplificação (ADR-0003).Documentação de apoio
Este PR vem com uma trilha de documentação em
docs/issues/issue-001/: enquadramento do problema como issue, diagnóstico, e decisões registradas com suas alternativas e trade-offs em ADRs dedicados:issue.md: o problema como um card, na visão de produto.investigation.md: o diagnóstico da causa-raiz no código.adr-0001.md: onde impor a unicidade (banco vs aplicação).adr-0002.md: por que não modelar desinstalação por ora.adr-0003.md: a mensagem de erro específica.