Feature/eventos:Escrita - POST/PUT/DELETE - #542
vitorhugomoraes2486 wants to merge 5 commits into
Conversation
EduTiyo
left a comment
There was a problem hiding this comment.
Revisão em duas frentes (Standards e Spec) da escrita de Eventos. A transação do PUT do agregado (trocar tipo COLETA↔DIARIO apagando/criando eventos_coletas, upsert quando o tipo não muda) está correta e dentro de uma transação só, e o mapeamento CHECK→422 foi rastreado ponta a ponta e funciona. Peço mudança por um motivo concreto: dois testes de integração deixam dados vazarem se a asserção falhar, violando a regra do próprio test/integration/README.md. O resto são observações de manutenibilidade, não bloqueantes.
| await knex.destroy() | ||
| }) | ||
|
|
||
| test('POST cria um evento DIARIO', async () => { |
There was a problem hiding this comment.
[Standards] Cleanup sem finally. Este teste (e o próximo, 'POST cria um evento COLETA com a ficha') faz o expect/toMatchObject e só depois await knex('eventos')...delete(), sem try/finally. Se a asserção falhar, a linha fica no banco — exatamente o que test/integration/README.md pede pra evitar ("Limpe os dados inseridos em um bloco finally, para que a limpeza rode mesmo se a asserção falhar"). Os testes de PUT/DELETE logo abaixo (ex: linha 117) já fazem certo — só replicar o padrão aqui.
| const eventoId = parseId(rawEventoId, 'eventoId') | ||
| if (eventoId instanceof Error) return new BadRequestError({ message: eventoId.message }) | ||
|
|
||
| const result = await this.removerEventoUseCase.execute({ id: eventoId }) |
There was a problem hiding this comment.
[Standards] Assimetria de estilo (não-bloqueante). Diferente de CriarEventoController/AtualizarEventoController, aqui qualquer left() vira 500 direto, sem checar instanceof CheckViolationError/ForeignKeyViolationError. Hoje é inofensivo — delete() por id não produz esses erros — mas se um novo tipo de erro for adicionado ao pg-error.ts no futuro, é fácil esquecer de replicar aqui também.
| } | ||
| } | ||
|
|
||
| const CAMPOS_DA_FICHA = [ |
There was a problem hiding this comment.
[Standards] Duplicated Code (smell). CAMPOS_DA_FICHA, isPlainObject e parseColeta estão copiados quase verbatim aqui, em AtualizarEventoController.ts (linha ~110) e uma terceira vez em EventoCollectionKnexAdapter.ts. Os três commits de fixup desta branch (0196a7b/432d71a/b391863) já mostram esse padrão sendo remendado separadamente em cada arquivo — sinal de que a duplicação vai continuar divergindo. Vale extrair para um módulo compartilhado antes que aconteça de novo.
| @@ -0,0 +1,92 @@ | |||
| import { Either } from '@/library/either/Either' | |||
There was a problem hiding this comment.
[Spec] Nota, não bloqueio. O combinado dizia "a regra de coerência existe em Evento.create(), mas o update precisa da sua própria". O que foi feito aqui reaproveita Evento.create() sobre o estado final mesclado, em vez de escrever uma regra separada — satisfaz a intenção (o estado final é validado antes de persistir) por DRY, mas diverge da letra do combinado. Só peço confirmação de que isso foi uma decisão consciente, não um corte de escopo.
Endpoints implementados:
Construção PUT:
Tratamento de erros:
Pontos marcados nos controllers para quando a autenticação for implementada.