Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Resposta do exercicio!

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";
  }
}
1 resposta
solução!

Olá, Vitor!

Pelo que vejo, você seguiu corretamente as instruções do exercício e criou a exceção ReceiverNotAuthenticatedException para verificar se o destinatário está autenticado. Além disso, você adicionou a lógica de teste na classe BankController e capturou a exceção no código da função main.

Aqui está um trecho do seu código que mostra isso:

// Verificar se o destinatário está autenticado
if(!accountReceiver.isAuthenticated){
  throw ReceiverNotAuthenticatedException(idReciever: idReceiver);
}

E aqui está a captura da exceção:

on ReceiverNotAuthenticatedException catch(e){
  print(e);
  print("O usuário destinatário de ID '${e.idReciever}' não está autenticado");
}

Parece que você fez tudo corretamente! Se você tiver algum erro específico ou outra dúvida sobre este exercício, por favor, compartilhe mais detalhes para que eu possa ajudar melhor.

Espero ter ajudado e bons estudos!