Ao realizar um transferência para uma conta de destino inexistente, o programa emite uma mensagem que a conta não existe e sugere voltar para o menu inicial, porém a transação não é cancelada, e o dinheiro some da conta de origem. Dessa forma, dentro da classe ContaService, adicionei ao método void realizarTransferência() uma condição antes dos this, para verificar se a conta existe ou não. Para isso eu dei um throw new na RegraDeNegocioException dentro do bloco if, para que caso seja digitada uma conta inexistente, o saldo não seja retirado da conta de origem, por isso coloquei a condição antes dos this, como eu disse anteriormente. Agora, o metodo realizarTransferencia, chama dentro do if o contaExiste passando como parâmetro o númeroContaDestino. Esse método contaExiste eu também coloquei dentro da mesma classe ContaService.
public void realizarTransferencia(Integer numeroContaOrigem, Integer numeroContaDestino, BigDecimal valor) {
if (!contaExiste(numeroContaDestino)) {
throw new RegraDeNegocioException("A conta de destino não existe.");
}
this.realizarSaque(numeroContaOrigem, valor);
this.realizarDeposito(numeroContaDestino, valor);
}
private boolean contaExiste(int numeroDaConta) {
Set<Conta> contasAbertas = this.listarContasAbertas();
for (Conta conta : contasAbertas) {
if (conta.getNumero() == numeroDaConta) {
return true; // A conta existe
}
}
return false; // A conta não existe
}