| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- package rocks.zipcode.atm;
-
- import rocks.zipcode.atm.bank.Account;
- import rocks.zipcode.atm.bank.AccountData;
- import rocks.zipcode.atm.bank.Bank;
-
- import java.util.ArrayList;
- import java.util.function.Consumer;
- import java.util.function.Supplier;
-
- /**
- * @author ZipCodeWilmington
- */
- public class CashMachine {
-
- private final Bank bank;
- private AccountData accountData = null;
-
- public CashMachine(Bank bank) {
- this.bank = bank;
- }
-
- private Consumer<AccountData> update = data -> {
- accountData = data;
- };
-
- public void login(int id) {
- tryCall(
- () -> bank.getAccountById(id),
- update
- );
- }
-
- public void deposit(double amount) {
- if (accountData != null) {
- tryCall(
- () -> bank.deposit(accountData, amount),
- update
- );
- }
- }
-
- public void withdraw(double amount) {
- if (accountData != null) {
- tryCall(
- () -> bank.withdraw(accountData, amount),
- update
- );
- }
- }
-
- public void exit() {
- if (accountData != null) {
- accountData = null;
- }
- }
-
- public String accountIdToString(){
- return "Account id: " + accountData.getId() + "\n";
- }
-
- public String nameToString(){
- return "Name : " + accountData.getName() + "\n";
- }
-
- public String emailToString(){
- return "Email : " + accountData.getEmail() + "\n";
- }
-
- public String balanceToString(){
- return "Balance : " + accountData.getBalance() + "\n";
- }
-
- public ArrayList<String> listAccounts(){
- return bank.listAccounts();
- }
-
- public int newBasicAccount(String name, String email, double balance) {
- bank.addBasicAccount(name,email,balance);
- return bank.newId();
- }
-
- public int newPremiumAccount(String name, String email, double balance) {
- bank.addPremiumAccount(name,email,balance);
- return bank.newId();
- }
-
- @Override
- public String toString() {
- return accountData != null ? accountData.toString() : "Try account 1000 or 2000 and click submit.";
- }
-
- private <T> void tryCall(Supplier<ActionResult<T> > action, Consumer<T> postAction) {
- try {
- ActionResult<T> result = action.get();
- if (result.isSuccess()) {
- T data = result.getData();
- postAction.accept(data);
- } else {
- String errorMessage = result.getErrorMessage();
- throw new RuntimeException(errorMessage);
- }
- } catch (Exception e) {
- System.out.println("Error: " + e.getMessage());
- }
- }
- }
|