Oi!
Estou com dois problemas que gostaria de ajustar no meu código e não estou conseguindo. O primeiro é tentar criar mais de uma transação, depois que eu crio a conta. A primeira transação ele cria, sem problemas, inclusive, fazendo o cálculo que precisa ser feito, que coloquei no enum. O problema está na segunda transação que eu faço, utilizando a mesma conta, retornando o erro 500.
Erro:
O segundo erro (ou tratamento) que também não estou conseguindo fazer, é ajustar, quando a conta não existir no banco, deverá retornar o erro 404. Eu tentei colocar uma condição na classe service, mas pelo tipo de retorno que eu declarei, pede para eu ajustar no ResponseEntity, que não está fazendo o tratamento e dá erro de compilação e só queria o retorno dessa transformação na classe controller. Poderia me ajudar, por favor o que estou fazendo errado?
Seguem as classes controller e service:
@RestController
@RequestMapping("transacao")
@SecurityRequirement(name = "bearer-key")
public class TransactController {
    @Autowired
    private TransactionService transactionService;
    @Autowired
    private AccountService accountService;
    @PostMapping
    @Transactional
    public ResponseEntity<DataDetailingTransaction> createTransaction(@RequestBody @Valid DataRegistrationTransaction request, UriComponentsBuilder uriBuilder) {
        DataRegistrationTransaction transaction = new DataRegistrationTransaction(request);
        Optional<Account> optionalAccount = accountService.findAccount(transaction.numeroConta());
        var dataDetailingTransaction = transactionService.saveTransaction(transaction);
//        BigDecimal fundValue = optionalAccount.get().getSaldo();
//        BigDecimal transactionValue = transaction.valor();
//        int diferenca = transactionValue.compareTo(fundValue);
//
//        if (diferenca < 0) {
//            return ResponseEntity.notFound().build();
//        }
//        Até pensei em colocar a condição por aqui, mas vi que não são boas práticas e também não faz sentido, se eu devo configurar na classe service.
        var uri = uriBuilder
                .path("/transacao/{id}")
                .buildAndExpand(dataDetailingTransaction)
                .toUri();
        return ResponseEntity.created(uri).body(dataDetailingTransaction);
    }
}
@Service
@Transactional
@RequiredArgsConstructor
public class TransactionService {
    @Autowired
    private AccountRepository accountRepository;
    @Autowired
    private TransactionRepository transactionRepository;
    public DataDetailingTransaction saveTransaction(DataRegistrationTransaction data) {
        var findAccount = accountRepository.findAccountByAtivoTrue(data.numeroConta());
        if (findAccount == null) {
            throw new ValidationException("Conta não cadastrada na base de dados.");
//            return new TreatErrors().treatError404();
//            Acima foi feito o tratamento de retorno que tentei fazer para retornar o erro 404
        }
        // Outras validações ou regras de negócio aqui...
        if (data.numeroConta() == null) {
            throw new ValidationException("Conta não cadastrada na base de dados.");
//            return new TreatErrors().treatError404();
        }
        Optional<Transaction> optTransaction = Optional.ofNullable(transactionRepository.findTransactionByAtivoTrue(data.numeroConta()));
        BigDecimal valorCalculado = computeTaxTransaction(data);
        Optional<Account> optAccount = Optional.ofNullable(accountRepository.findAccountByAtivoTrue(data.numeroConta()));
        BigDecimal saldoInicial;
        saldoInicial = optAccount.get().getSaldo();
        BigDecimal saldo;
        saldo = saldoInicial.subtract(valorCalculado);
        var account = new Account(optAccount.get().getId(), data.numeroConta(), saldo, true);
        accountRepository.save(account);
        var transaction = new Transaction(data, findAccount);
        transactionRepository.save(transaction);
        return new DataDetailingTransaction(transaction);
    }
    
Optional.ofNullable(transactionRepository.findTransactionByAtivoTrue(transactions.getAccount().getNumeroConta()));
private BigDecimal computeTaxTransaction(DataRegistrationTransaction transactions) {
        if (transactions.formaPagamento() == null) {
            throw new ValidationException("É obrigatório informar a forma de pagamento para validar o processo de transação.");
        }
        BigDecimal taxTransaction;
        PaymentForm paymentForm = transactions.formaPagamento();
        taxTransaction = paymentForm.computeTaxTransaction(transactions.valor());
        return taxTransaction;
    }
}
        
        
  
  
  
  
  
  
A configuração da classe de serviço, até o momento é essa: