O problema parece estar relacionado à lógica de registro de transações no método registrarTransacao
da classe Conta
. O código que você compartilhou está estruturado corretamente, mas o problema provavelmente ocorre devido à maneira como o saldo é manipulado durante o registro das transações.
Primeiro, vamos analisar o método registrarTransacao
e os métodos auxiliares debitar
e depositar
:
const Conta = {
getSaldo() {
return saldo;
},
getDataAcesso(): Date {
return new Date();
},
registrarTransacao(novaTransacao: Transacao): void {
if (novaTransacao.tipoTransacao == TipoTransacao.DEPOSITO) {
depositar(novaTransacao.valor);
}
else if (novaTransacao.tipoTransacao == TipoTransacao.TRANSFERENCIA || novaTransacao.tipoTransacao == TipoTransacao.PAGAMENTO_BOLETO) {
debitar(novaTransacao.valor);
}
else {
throw new Error("Tipo de Transação é inválido!");
}
console.log(novaTransacao);
}
}
Aqui, o método registrarTransacao
verifica o tipo da transação e chama depositar
ou debitar
de acordo. Os métodos debitar
e depositar
são responsáveis por atualizar o saldo.
Verifique os métodos debitar
e depositar
:
function debitar(valor: number): void {
if (valor <= 0) {
throw new Error("O valor a ser debitado deve ser maior que zero!");
}
if (valor > saldo) {
throw new Error("Saldo insuficiente!");
}
saldo -= valor;
}
function depositar(valor: number): void {
if (valor <= 0) {
throw new Error("O valor a ser depositado deve ser maior que zero!");
}
saldo += valor;
}
Aqui está um ajuste que você pode fazer para garantir que o saldo não fique negativo ao realizar uma transferência:
Verifique se o saldo é suficiente antes de realizar a transação: Embora você já tenha essa verificação no método debitar
, é importante garantir que essa lógica esteja sendo chamada corretamente no registrarTransacao
.
Adicione logs para depuração: Isso ajuda a entender melhor o que está acontecendo quando a transação é registrada.
Verifique se o método debitar
está sendo chamado corretamente: Assegure-se de que a verificação de saldo ocorra antes da atualização.
Aqui está a versão ajustada:
const Conta = {
getSaldo() {
return saldo;
},
getDataAcesso(): Date {
return new Date();
},
registrarTransacao(novaTransacao: Transacao): void {
try {
console.log(`Registrando transação: ${JSON.stringify(novaTransacao)}`);
if (novaTransacao.tipoTransacao == TipoTransacao.DEPOSITO) {
depositar(novaTransacao.valor);
}
else if (novaTransacao.tipoTransacao == TipoTransacao.TRANSFERENCIA || novaTransacao.tipoTransacao == TipoTransacao.PAGAMENTO_BOLETO) {
debitar(novaTransacao.valor);
}
else {
throw new Error("Tipo de Transação é inválido!");
}
} catch (error) {
console.error(`Erro ao registrar transação: ${error.message}`);
throw error;
}
console.log(`Saldo após transação: ${saldo}`);
}
}
Ao fazer uma transferência ou pagamento de boleto, certifique-se de que o saldo é suficiente. Caso contrário, o método debitar
lançará um erro, e a transação não será registrada, evitando que o saldo fique negativo.