Fiz esse teste e rodou tranquilamente!!
Main
import 'controllers/bank_controller.dart';
import 'exceptions/bank_controller_excpetions.dart';
import 'models/account.dart';
void main(List<String> args) {
BankController bankController = BankController();
bankController.addAccount(
id: "Ricarth",
account:
Account(name: "Ricarth Lima", balance: 600, isAuthenticated: true));
bankController.addAccount(
id: "Duque",
account:
Account(name: "Guilherme Duque", balance: 39, isAuthenticated: true));
try {
bool result = bankController.makeTransfer(
idSender: "Ricarth", idReceiver: "Duque", amount: 700);
if (result) {
print("Transação concluída!");
}
} on SenderIdInvalidException catch (e) {
print(e);
print("O ID '${e.idSender}' do remetente não é válido!");
} on ReceiverIdInvalidException catch (e) {
print(e);
print("O ID '${e.idReceiver}' do destinatário não é válido!");
} on SenderNotAuthenticatedException catch (e) {
print(e);
print("O usuário remetente de ID ${e.idSender} não está autenticado!");
} on ReceiverNotAuthenticatedException catch (e) {
print(e);
print("O usuário destinatário de ID ${e.idReceiver} não está autenticado!");
} on SenderBalanceLowerThanAmountException catch (e) {
print(e);
print(
"O usuário de ID '${e.idSender}' tentou enviar ${e.amount} sendo que sua conta tem apenas ${e.senderBalance}");
}
}
Bank Controller
import '../exceptions/bank_controller_excpetions.dart';
import '../models/account.dart';
class BankController {
final Map<String, Account> _database = {};
addAccount({required String id, required Account account}) {
_database[id] = account;
}
bool makeTransfer(
{required String idSender,
required String idReceiver,
required double amount}) {
if (!verifyId(idSender)) {
throw SenderIdInvalidException(idSender: idSender);
}
if (!verifyId(idReceiver)) {
throw ReceiverIdInvalidException(idReceiver: idReceiver);
}
Account accountSender = _database[idSender]!;
Account accountReceiver = _database[idReceiver]!;
if (!accountSender.isAuthenticated) {
throw SenderNotAuthenticatedException(idSender: idSender);
}
if (!accountReceiver.isAuthenticated) {
throw ReceiverNotAuthenticatedException(idReceiver: idReceiver);
}
// Verifica se o remetente tem saldo suficiente para enviar o dinheiro
if (accountSender.balance < amount) {
throw SenderBalanceLowerThanAmountException(idSender: idSender, senderBalance: accountSender.balance, amount: amount);
}
accountSender.balance -= amount;
accountReceiver.balance += amount;
return true;
}
bool verifyId(String id) {
return _database.containsKey(id);
}
}
Bank Controlle Exceptions
import '../exceptions/bank_controller_excpetions.dart';
import '../models/account.dart';
class BankController {
final Map<String, Account> _database = {};
addAccount({required String id, required Account account}) {
_database[id] = account;
}
bool makeTransfer(
{required String idSender,
required String idReceiver,
required double amount}) {
if (!verifyId(idSender)) {
throw SenderIdInvalidException(idSender: idSender);
}
if (!verifyId(idReceiver)) {
throw ReceiverIdInvalidException(idReceiver: idReceiver);
}
Account accountSender = _database[idSender]!;
Account accountReceiver = _database[idReceiver]!;
if (!accountSender.isAuthenticated) {
throw SenderNotAuthenticatedException(idSender: idSender);
}
if (!accountReceiver.isAuthenticated) {
throw ReceiverNotAuthenticatedException(idReceiver: idReceiver);
}
// Verifica se o remetente tem saldo suficiente para enviar o dinheiro
if (accountSender.balance < amount) {
throw SenderBalanceLowerThanAmountException(idSender: idSender, senderBalance: accountSender.balance, amount: amount);
}
accountSender.balance -= amount;
accountReceiver.balance += amount;
return true;
}
bool verifyId(String id) {
return _database.containsKey(id);
}
}