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
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→ usaorg.springframework.data.crossstore.ChangeSetPersister.NotFoundException, classe interna/legada do Spring Data que não deveria ser usada como exceção de aplicação.FixedBillService→ usajakarta.persistence.EntityNotFoundException(exceção de infraestrutura JPA, não de domínio).InstallmentBillRepository→ usanew RuntimeException("... NotFoundException by code=" + code), uma exceção genérica sem tipo próprio, mensagem crua e sem tratamento dedicado noControllerExceptionHandler.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
EntityNotFoundExceptionprópria emcore/domain/exception(ou específicas por agregado, ex.FinancialMovementNotFoundException,FixedBillNotFoundException,InstallmentBillNotFoundException, todas herdando de uma base comum).ChangeSetPersister.NotFoundException,jakarta.persistence.EntityNotFoundException,RuntimeExceptiongenérica) pela nova exceção de domínio.@ExceptionHandlercorrespondente noControllerExceptionHandler, garantindo resposta 404 padronizada (mesmo formato de corpo) para os três casos.FixedBillService.validationMandatoryFields, que hoje lançanew RuntimeException()sem mensagem — deveria usar uma exceção de validação específica com mensagem clara.Prioridade
Alta