Remover schema_version do diagnóstico de ping
TLDR: Remove o campo
schema_versiondeMeetingParticipantPing(coluna do banco e chave dentro do payloaddiagnostics), porque hoje ele não versiona nada de verdade e não há previsão de o payload de diagnóstico escalar a ponto de precisar disso.
Contexto
A feature de diagnóstico de ping (meeting_ping_diagnostics, PR #697, na época ainda aberta) introduziu uma coluna schema_version em meeting_participant_pings com a intenção de versionar o formato do JSON em diagnostics, permitindo evoluir o payload sem quebrar leituras históricas.
Na prática, essa versão nunca é realmente derivada do que o cliente envia: MeetingParticipants::CreatePing#call cria o registro sem passar schema_version, então a coluna sempre grava o default do banco ("1"), independente do conteúdo de diagnostics. Além disso, não existe nenhum lugar no código que leia diagnostics de volta e faça dispatch por versão — o serializer da resposta (MeetingParticipantPingSerializer) nem expõe diagnostics/schema_version ao front.
Ou seja: o campo existe, mas não versiona nada — é uma coluna sempre fixa em "1" sem leitor versionado. Como não há expectativa de que o payload de diagnóstico cresça a ponto de precisar de versionamento formal, a decisão é remover o campo em vez de mantê-lo como peso morto.
Como a feature ainda não tinha sido mergeada (branch feat/meeting-ping-diagnostics, PR #697 aberta), a remoção é feita com uma nova migration — e não editando a migration original, já que os commits já haviam sido enviados e a PR estava aberta para revisão de outra pessoa.
Objetivos
- Remover a coluna
schema_versiondemeeting_participant_pingsvia nova migration - Remover a validação de presença de
schema_versiondo modelMeetingParticipantPing - Remover a chave de exemplo
schema_versionde dentro do payloaddiagnosticsna spec original, no factory e nos specs de request - Manter todo o resto da feature de diagnóstico (tabela,
diagnosticsjsonb, associação, use case) intacto
Fora de escopo
- Remover o payload de diagnóstico em si (
diagnosticsjsonb) — só o conceito de versionamento sai - Reintroduzir versionamento de outra forma (coluna computada, enum). Se o payload crescer a ponto de precisar, é decisão futura com spec própria
- Mexer na spec original além de tirar as referências a
schema_version
Mudanças
| Arquivo | Ação |
|---|---|
db/migrate/20260731120000_remove_schema_version_from_meeting_participant_pings.rb |
criado — remove_column :meeting_participant_pings, :schema_version |
db/schema.rb |
atualizado via make db.migrate |
app/models/meeting_participant_ping.rb |
remove validates :schema_version, presence: true |
spec/models/meeting_participant_ping_spec.rb |
remove o teste de validate_presence_of(:schema_version) e o contexto “defaults” |
spec/factories/meeting_participant_pings.rb |
remove schema_version { "1" } da factory base e a chave schema_version: do trait :with_diagnostics |
spec/requests/api/v1/meetings/participant_pings_update_spec.rb |
remove a chave schema_version: do payload de teste |
| meeting_ping_diagnostics | atualiza a tabela de colunas e o exemplo de payload removendo schema_version; remove o objetivo de versionamento |
Como verificar
```bash make db.migrate make test test=spec/models/meeting_participant_ping_spec.rb make test test=spec/requests/api/v1/meetings/participant_pings_update_spec.rb
console
MeetingParticipantPing.column_names # não deve incluir “schema_version” ```
Documentação
Nenhuma doc nova — apenas a atualização da spec original citada acima, para refletir a remoção.