dart_exceptions.dart
import 'controllers/bank_controller.dart';
import 'exceptions/bank_controller_exeptions.dart';
import 'models/account.dart';
void main() {
// Criando o banco
BankController bankController = BankController();
// Adicionando contas
bankController.addAccount(
id: "Ricarth",
account:
Account(name: "Ricarth Lima", balance: 400, isAuthenticated: false));
bankController.addAccount(
id: "Kako",
account:
Account(name: "Caio Couto", balance: 600, isAuthenticated: true));
// Fazendo transferência
try{
bool result = bankController.makeTransfer(
idSender: "Kako", idReceiver: "Ricarth", amount: 800);
// Observando resultado
if (result){
print('Transação concluída com sucesso!');
}
}on ValidSenderIdExeption catch(e){
print(e);
print("O ID '${e.idSender}' do remetente não é um ID válido.");
}on ValidRecieverIdExeption catch(e){
print(e);
print("O ID '${e.idReciever}' do remetente não é um ID válido.");
}on EnoughMoneyExeption catch(e){
print(e);
print("O usuário de ID '${e.idSender}' tentou enviar '${e.amount}' sendo que sua conta tem apenas '${e.accountMoney}'.");
}on SenderNotAutenticated 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.idReciever}' não está autenticado");
}on Exception{
print('Algo deu errado');
}
}
bank_controller.dart
import '../exceptions/bank_controller_exeptions.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}) {
// Verificar se ID de remetente é válido
if (!verifyId(idSender)) {
throw ValidSenderIdExeption(idSender: idSender);
}
// Verificar se ID de destinatário é válido
if (!verifyId(idReceiver)) {
throw ValidRecieverIdExeption(idReciever: idReceiver);
}
Account accountSender = _database[idSender]!;
Account accountReceiver = _database[idReceiver]!;
// Verificar se o remetente está autenticado
if (!accountSender.isAuthenticated) {
throw SenderNotAutenticated(idSender: idSender);
}
if(!accountReceiver.isAuthenticated){
throw ReceiverNotAuthenticatedException(idReciever: idReceiver);
}
// Verificar se o remetente possui saldo suficiente
if (accountSender.balance < amount) {
throw EnoughMoneyExeption(
idSender: idSender,
accountMoney: accountSender.balance,
amount: amount);
}
// Se tudo estiver certo, efetivar transação
accountSender.balance -= amount;
accountReceiver.balance += amount;
return true;
}
bool verifyId(String id) {
return _database.containsKey(id);
}
}
bank_controller_exceptions.dart
class ValidSenderIdExeption{
static const String report = "validSenderIdExeption";
String idSender;
ValidSenderIdExeption({required this.idSender});
@override
String toString(){
return "$report\n ID Sender: $idSender";
}
}
class ValidRecieverIdExeption{
static const String report = "validRecieverIdExeption";
String idReciever;
ValidRecieverIdExeption({required this.idReciever});
@override
String toString(){
return "$report\nID Reciever: $idReciever\n";
}
}
class SenderNotAutenticated{
static const String report = "senderNotAutenticated";
String idSender;
SenderNotAutenticated({required this.idSender});
@override
String toString(){
return "$report\nID Sender: $idSender\n";
}
}
class ReceiverNotAuthenticatedException{
String report = "recieverNotAuthenticated";
String idReciever;
ReceiverNotAuthenticatedException({required this.idReciever});
@override
String toString() {
return "$report\nID Reciever: $idReciever\n";
}
}
class EnoughMoneyExeption{
static const String report = "enoughMoneyExeption";
String idSender;
double accountMoney;
double amount;
EnoughMoneyExeption({required this.idSender, required this.accountMoney, required this.amount});
@override
String toString() {
return "$report\nID Sender: $idSender\nAccount Money: $accountMoney\nAmount: $amount\n";
}
}