Skip to content

Unificar tratamento de 'não encontrado' entre os services (3 padrões distintos) #43

Description

@brunosilvaJava

Problema

O tratamento de "não encontrado" está implementado de forma diferente em cada feature, sem um padrão único de exceção de domínio:

  • FinancialMovementService → usa org.springframework.data.crossstore.ChangeSetPersister.NotFoundException, classe interna/legada do Spring Data que não deveria ser usada como exceção de aplicação.
  • FixedBillService → usa jakarta.persistence.EntityNotFoundException (exceção de infraestrutura JPA, não de domínio).
  • InstallmentBillRepository → usa new RuntimeException("... NotFoundException by code=" + code), uma exceção genérica sem tipo próprio, mensagem crua e sem tratamento dedicado no ControllerExceptionHandler.

Resultado: comportamento de erro (e status HTTP retornado ao cliente) pode ser inconsistente entre os três domínios, e nenhuma dessas exceções é claramente uma exceção de domínio da aplicação.

Proposta

  • Criar uma exceção de domínio única e reutilizável, ex. EntityNotFoundException própria em core/domain/exception (ou específicas por agregado, ex. FinancialMovementNotFoundException, FixedBillNotFoundException, InstallmentBillNotFoundException, todas herdando de uma base comum).
  • Substituir os três usos atuais (ChangeSetPersister.NotFoundException, jakarta.persistence.EntityNotFoundException, RuntimeException genérica) pela nova exceção de domínio.
  • Adicionar @ExceptionHandler correspondente no ControllerExceptionHandler, garantindo resposta 404 padronizada (mesmo formato de corpo) para os três casos.
  • Aproveitar para revisar FixedBillService.validationMandatoryFields, que hoje lança new RuntimeException() sem mensagem — deveria usar uma exceção de validação específica com mensagem clara.

Prioridade

Alta

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions