From 5aac378733683f8eb5748777fcc6afeeba9132ad Mon Sep 17 00:00:00 2001 From: majumdarSammya Date: Wed, 16 Aug 2023 18:04:46 +0100 Subject: [PATCH 1/4] added transfer service feature & refactoring --- .gitignore | 1 + src/main/java/com/abc/Account.java | 76 ++++++++++------- src/main/java/com/abc/Bank.java | 9 +-- src/main/java/com/abc/Customer.java | 18 +++-- .../java/com/abc/DateUtils/DateChecker.java | 30 +++++++ .../com/abc/{ => DateUtils}/DateProvider.java | 3 +- src/main/java/com/abc/Transaction.java | 16 +++- .../TransferServiceUtils/TransferMoney.java | 24 ++++++ src/test/java/com/abc/AccountTest.java | 81 +++++++++++++++++++ src/test/java/com/abc/BankTest.java | 35 ++++---- src/test/java/com/abc/CustomerTest.java | 25 +++--- .../abc/DateUtilsTests/DateCheckerTest.java | 38 +++++++++ src/test/java/com/abc/TransactionTest.java | 29 ++++++- .../MoneyTransferTest.java | 37 +++++++++ 14 files changed, 356 insertions(+), 66 deletions(-) create mode 100644 src/main/java/com/abc/DateUtils/DateChecker.java rename src/main/java/com/abc/{ => DateUtils}/DateProvider.java (92%) create mode 100644 src/main/java/com/abc/TransferServiceUtils/TransferMoney.java create mode 100644 src/test/java/com/abc/AccountTest.java create mode 100644 src/test/java/com/abc/DateUtilsTests/DateCheckerTest.java create mode 100644 src/test/java/com/abc/TransferServiceTests/MoneyTransferTest.java diff --git a/.gitignore b/.gitignore index 4fb13b9a..d539fff9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ target/ bin/ *.iml +prompts.txt diff --git a/src/main/java/com/abc/Account.java b/src/main/java/com/abc/Account.java index 099691e0..5d7726de 100644 --- a/src/main/java/com/abc/Account.java +++ b/src/main/java/com/abc/Account.java @@ -1,8 +1,11 @@ package com.abc; +import java.util.Date; import java.util.ArrayList; import java.util.List; +import com.abc.DateUtils.DateChecker; + public class Account { public static final int CHECKING = 0; @@ -11,12 +14,16 @@ public class Account { private final int accountType; public List transactions; + DateChecker dateCheck = new DateChecker(); + // account class constructor public Account(int accountType) { this.accountType = accountType; this.transactions = new ArrayList(); + } + // add money method public void deposit(double amount) { if (amount <= 0) { throw new IllegalArgumentException("amount must be greater than zero"); @@ -25,49 +32,62 @@ public void deposit(double amount) { } } -public void withdraw(double amount) { - if (amount <= 0) { - throw new IllegalArgumentException("amount must be greater than zero"); - } else { - transactions.add(new Transaction(-amount)); + // withdraw money method + public void withdraw(double amount) { + if (amount <= 0) { + throw new IllegalArgumentException("amount must be greater than zero"); + } else { + transactions.add(new Transaction(-amount)); + } } -} - public double interestEarned() { - double amount = sumTransactions(); - switch(accountType){ - case SAVINGS: - if (amount <= 1000) - return amount * 0.001; - else - return 1 + (amount-1000) * 0.002; -// case SUPER_SAVINGS: -// if (amount <= 4000) -// return 20; - case MAXI_SAVINGS: - if (amount <= 1000) - return amount * 0.02; - if (amount <= 2000) - return 20 + (amount-1000) * 0.05; - return 70 + (amount-2000) * 0.1; - default: - return amount * 0.001; + // calculate checking account interest + public double interestEarnedChecking() { + double amount = getAccountBalance(); + return amount * 0.001; + + } + + // calculate savings account interest + public double interestEarnedSavings() { + double amount = getAccountBalance(); + if (amount <= 1000) + return amount * 0.001; + else + return 1 + (amount - 1000) * 0.002; + } + + // calculate maxi saver account interest + public double interestEarnedMaxiSavings() { + double amount = getAccountBalance(); + boolean val = dateCheck.hasTransactionsWithinLastTenDays(transactions); + if (val) { + return amount * 0.001; + } else { + return amount * 0.05; } } - public double sumTransactions() { - return checkIfTransactionsExist(true); + // add transactions + public double getAccountBalance() { + return checkIfTransactionsExist(true); } + // check validity of transaction private double checkIfTransactionsExist(boolean checkAll) { double amount = 0.0; - for (Transaction t: transactions) + for (Transaction t : transactions) amount += t.amount; return amount; } + // get account type public int getAccountType() { return accountType; } + public List getTransactionList() { + return transactions; + } + } diff --git a/src/main/java/com/abc/Bank.java b/src/main/java/com/abc/Bank.java index 5dd535bd..5483aa4d 100644 --- a/src/main/java/com/abc/Bank.java +++ b/src/main/java/com/abc/Bank.java @@ -21,24 +21,23 @@ public String customerSummary() { return summary; } - //Make sure correct plural of word is created based on the number passed in: - //If number passed in is 1 just return the word otherwise add an 's' at the end + // Make sure correct plural of word is created based on the number passed in: + // If number passed in is 1 just return the word otherwise add an 's' at the end private String format(int number, String word) { return number + " " + (number == 1 ? word : word + "s"); } public double totalInterestPaid() { double total = 0; - for(Customer c: customers) + for (Customer c : customers) total += c.totalInterestEarned(); return total; } public String getFirstCustomer() { try { - customers = null; return customers.get(0).getName(); - } catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return "Error"; } diff --git a/src/main/java/com/abc/Customer.java b/src/main/java/com/abc/Customer.java index 31571685..7d749b6e 100644 --- a/src/main/java/com/abc/Customer.java +++ b/src/main/java/com/abc/Customer.java @@ -30,7 +30,12 @@ public int getNumberOfAccounts() { public double totalInterestEarned() { double total = 0; for (Account a : accounts) - total += a.interestEarned(); + if (a.getAccountType() == 0) + total += a.interestEarnedChecking(); + else if (a.getAccountType() == 1) + total += a.interestEarnedSavings(); + else + total += a.interestEarnedMaxiSavings(); return total; } @@ -40,7 +45,7 @@ public String getStatement() { double total = 0.0; for (Account a : accounts) { statement += "\n" + statementForAccount(a) + "\n"; - total += a.sumTransactions(); + total += a.getAccountBalance(); } statement += "\nTotal In All Accounts " + toDollars(total); return statement; @@ -49,8 +54,8 @@ public String getStatement() { private String statementForAccount(Account a) { String s = ""; - //Translate to pretty account type - switch(a.getAccountType()){ + // Translate to pretty account type + switch (a.getAccountType()) { case Account.CHECKING: s += "Checking Account\n"; break; @@ -62,7 +67,7 @@ private String statementForAccount(Account a) { break; } - //Now total up all the transactions + // Now total up all the transactions double total = 0.0; for (Transaction t : a.transactions) { s += " " + (t.amount < 0 ? "withdrawal" : "deposit") + " " + toDollars(t.amount) + "\n"; @@ -72,7 +77,8 @@ private String statementForAccount(Account a) { return s; } - private String toDollars(double d){ + private String toDollars(double d) { return String.format("$%,.2f", abs(d)); } + } diff --git a/src/main/java/com/abc/DateUtils/DateChecker.java b/src/main/java/com/abc/DateUtils/DateChecker.java new file mode 100644 index 00000000..3a218f75 --- /dev/null +++ b/src/main/java/com/abc/DateUtils/DateChecker.java @@ -0,0 +1,30 @@ +package com.abc.DateUtils; + +import java.util.Date; +import java.util.List; + +import com.abc.Transaction; + +public class DateChecker { + public boolean isWithinLast10Days(Date transactionDate) { + + Date today = new Date(); + long differenceInMillis = today.getTime() - transactionDate.getTime(); + long tenDaysInMillis = 10 * 24 * 60 * 60 * 1000; + + return differenceInMillis <= tenDaysInMillis; + } + + public boolean hasTransactionsWithinLastTenDays(List transactions) { + Date today = new Date(); + + for (Transaction transaction : transactions) { + Date transactionDate = transaction.getTransactionDate(); + if (isWithinLast10Days(transactionDate) && transaction.amount <= 0) { + return true; + } + } + + return false; + } +} diff --git a/src/main/java/com/abc/DateProvider.java b/src/main/java/com/abc/DateUtils/DateProvider.java similarity index 92% rename from src/main/java/com/abc/DateProvider.java rename to src/main/java/com/abc/DateUtils/DateProvider.java index 035ee90b..5c150361 100644 --- a/src/main/java/com/abc/DateProvider.java +++ b/src/main/java/com/abc/DateUtils/DateProvider.java @@ -1,4 +1,4 @@ -package com.abc; +package com.abc.DateUtils; import java.util.Calendar; import java.util.Date; @@ -15,4 +15,5 @@ public static DateProvider getInstance() { public Date now() { return Calendar.getInstance().getTime(); } + } diff --git a/src/main/java/com/abc/Transaction.java b/src/main/java/com/abc/Transaction.java index c1f7c67e..b24be35b 100644 --- a/src/main/java/com/abc/Transaction.java +++ b/src/main/java/com/abc/Transaction.java @@ -1,8 +1,9 @@ package com.abc; -import java.util.Calendar; import java.util.Date; +import com.abc.DateUtils.DateProvider; + public class Transaction { public final double amount; @@ -13,4 +14,17 @@ public Transaction(double amount) { this.transactionDate = DateProvider.getInstance().now(); } + public Date getTransactionDate() { + return transactionDate; + } + + public double getTransactionAmount() { + return amount; + } + + public boolean isAfter(Date date) { + + return transactionDate.after(date); + } + } diff --git a/src/main/java/com/abc/TransferServiceUtils/TransferMoney.java b/src/main/java/com/abc/TransferServiceUtils/TransferMoney.java new file mode 100644 index 00000000..8b0e64f0 --- /dev/null +++ b/src/main/java/com/abc/TransferServiceUtils/TransferMoney.java @@ -0,0 +1,24 @@ +package com.abc.TransferServiceUtils; + +import com.abc.Account; + +public class TransferMoney { + + /* + * moveMoneyBetweenAccounts takes two accounts and a transfer amount as + * arguments + * performs a check if the balance in the source account is higher + * then updates the balance for both the accounts + * if lower balance is detected, throws an error + */ + + public void moveMoneyBetweenAccounts(Account source, Account destination, double amount) { + double sourceBalance = source.getAccountBalance(); + if (sourceBalance >= amount) { + source.withdraw(amount); + destination.deposit(amount); + } else { + throw new IllegalArgumentException("Balance must be higher than transfer amount"); + } + } +} diff --git a/src/test/java/com/abc/AccountTest.java b/src/test/java/com/abc/AccountTest.java new file mode 100644 index 00000000..a38dd96b --- /dev/null +++ b/src/test/java/com/abc/AccountTest.java @@ -0,0 +1,81 @@ +package com.abc; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class AccountTest { + private static final double DOUBLE_DELTA = 1e-15; + + @Test + public void testCheckingAccountInterestEarned() { + Bank bank = new Bank(); + Account checkingAccount = new Account(Account.CHECKING); + Customer bill = new Customer("Bill").openAccount(checkingAccount); + bank.addCustomer(bill); + + checkingAccount.deposit(100.0); + + assertEquals(0.1, checkingAccount.interestEarnedChecking(), DOUBLE_DELTA); + } + + @Test + public void testSavingsAccountInterestEarned() { + Bank bank = new Bank(); + Account savingsAccount = new Account(Account.SAVINGS); + bank.addCustomer(new Customer("Bill").openAccount(savingsAccount)); + + savingsAccount.deposit(1500.0); + + assertEquals(2.0, savingsAccount.interestEarnedSavings(), DOUBLE_DELTA); + } + + @Test + public void testMaxiSaverAccountHighInterestEarned() { + Bank bank = new Bank(); + Account maxiSaverAccount = new Account(Account.MAXI_SAVINGS); + bank.addCustomer(new Customer("Bill").openAccount(maxiSaverAccount)); + for (int i = 0; i < 5; i++) { + maxiSaverAccount.deposit(3000.0); + } + ; + + assertEquals(750.0, maxiSaverAccount.interestEarnedMaxiSavings(), DOUBLE_DELTA); + } + + @Test + public void testMaxiSaverAccountLowInterestEarned() { + Bank bank = new Bank(); + Account maxiSaverAccount = new Account(Account.MAXI_SAVINGS); + bank.addCustomer(new Customer("Bill").openAccount(maxiSaverAccount)); + for (int i = 0; i < 5; i++) { + maxiSaverAccount.deposit(3000.0); + } + ; + maxiSaverAccount.withdraw(1000.0); + + assertEquals(14.0, maxiSaverAccount.interestEarnedMaxiSavings(), DOUBLE_DELTA); + } + + @Test + public void testAccountBalance() { + Bank bank = new Bank(); + Account checkingAccount = new Account(Account.CHECKING); + bank.addCustomer(new Customer("Bill").openAccount(checkingAccount)); + + checkingAccount.deposit(500); + checkingAccount.deposit(700); + checkingAccount.withdraw(200); + + assertEquals(1000, checkingAccount.getAccountBalance(), DOUBLE_DELTA); + } + + @Test + public void testAccountType() { + Bank bank = new Bank(); + Account maxiSaverAccount = new Account(Account.MAXI_SAVINGS); + bank.addCustomer(new Customer("Bill").openAccount(maxiSaverAccount)); + + assertEquals(2, maxiSaverAccount.getAccountType(), DOUBLE_DELTA); + } +} diff --git a/src/test/java/com/abc/BankTest.java b/src/test/java/com/abc/BankTest.java index f8a82896..4bbaa299 100644 --- a/src/test/java/com/abc/BankTest.java +++ b/src/test/java/com/abc/BankTest.java @@ -8,7 +8,7 @@ public class BankTest { private static final double DOUBLE_DELTA = 1e-15; @Test - public void customerSummary() { + public void testCustomerSummary() { Bank bank = new Bank(); Customer john = new Customer("John"); john.openAccount(new Account(Account.CHECKING)); @@ -18,37 +18,42 @@ public void customerSummary() { } @Test - public void checkingAccount() { + public void testTotalInterestPaidSameCustomer() { Bank bank = new Bank(); Account checkingAccount = new Account(Account.CHECKING); + Account savingsAccount = new Account(Account.SAVINGS); Customer bill = new Customer("Bill").openAccount(checkingAccount); + bill.openAccount(savingsAccount); bank.addCustomer(bill); + savingsAccount.deposit(100.0); checkingAccount.deposit(100.0); - assertEquals(0.1, bank.totalInterestPaid(), DOUBLE_DELTA); + assertEquals(0.2, bank.totalInterestPaid(), DOUBLE_DELTA); } @Test - public void savings_account() { + public void testTotalInterestPaidDifferentCustomer() { Bank bank = new Bank(); - Account checkingAccount = new Account(Account.SAVINGS); - bank.addCustomer(new Customer("Bill").openAccount(checkingAccount)); - - checkingAccount.deposit(1500.0); + Account checkingAccount = new Account(Account.CHECKING); + Account savingsAccount = new Account(Account.SAVINGS); + bank.addCustomer(new Customer("Bill").openAccount(savingsAccount)); + bank.addCustomer(new Customer("Mary").openAccount(checkingAccount)); + savingsAccount.deposit(1500.0); + checkingAccount.deposit(5000); - assertEquals(2.0, bank.totalInterestPaid(), DOUBLE_DELTA); + assertEquals(7.0, bank.totalInterestPaid(), DOUBLE_DELTA); } @Test - public void maxi_savings_account() { + public void testGetFirstCustomer() { Bank bank = new Bank(); - Account checkingAccount = new Account(Account.MAXI_SAVINGS); - bank.addCustomer(new Customer("Bill").openAccount(checkingAccount)); - - checkingAccount.deposit(3000.0); + Account maxiSaverAccount = new Account(Account.MAXI_SAVINGS); + bank.addCustomer(new Customer("Mary").openAccount(maxiSaverAccount)); + bank.addCustomer(new Customer("Bill").openAccount(maxiSaverAccount)); + bank.addCustomer(new Customer("John").openAccount(maxiSaverAccount)); - assertEquals(170.0, bank.totalInterestPaid(), DOUBLE_DELTA); + assertEquals("Mary", bank.getFirstCustomer()); } } diff --git a/src/test/java/com/abc/CustomerTest.java b/src/test/java/com/abc/CustomerTest.java index b8df9498..39ba3ba5 100644 --- a/src/test/java/com/abc/CustomerTest.java +++ b/src/test/java/com/abc/CustomerTest.java @@ -1,20 +1,19 @@ package com.abc; -import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.assertEquals; public class CustomerTest { - @Test //Test customer statement generation - public void testApp(){ + @Test // Test customer statement generation + public void testgetStatement() { Account checkingAccount = new Account(Account.CHECKING); Account savingsAccount = new Account(Account.SAVINGS); - Customer henry = new Customer("Henry").openAccount(checkingAccount).openAccount(savingsAccount); - + Customer henry = new Customer("Henry").openAccount(checkingAccount); + henry.openAccount(savingsAccount); checkingAccount.deposit(100.0); savingsAccount.deposit(4000.0); savingsAccount.withdraw(200.0); @@ -34,24 +33,32 @@ public void testApp(){ } @Test - public void testOneAccount(){ + public void testOneAccount() { Customer oscar = new Customer("Oscar").openAccount(new Account(Account.SAVINGS)); assertEquals(1, oscar.getNumberOfAccounts()); } @Test - public void testTwoAccount(){ + public void testTwoAccountS() { Customer oscar = new Customer("Oscar") .openAccount(new Account(Account.SAVINGS)); oscar.openAccount(new Account(Account.CHECKING)); assertEquals(2, oscar.getNumberOfAccounts()); } - @Ignore - public void testThreeAcounts() { + @Test + public void testThreeAccounts() { Customer oscar = new Customer("Oscar") .openAccount(new Account(Account.SAVINGS)); oscar.openAccount(new Account(Account.CHECKING)); + oscar.openAccount(new Account(Account.MAXI_SAVINGS)); assertEquals(3, oscar.getNumberOfAccounts()); } + + @Test + public void testGetName() { + Customer oscar = new Customer("Oscar"); + assertEquals("Oscar", oscar.getName()); + } + } diff --git a/src/test/java/com/abc/DateUtilsTests/DateCheckerTest.java b/src/test/java/com/abc/DateUtilsTests/DateCheckerTest.java new file mode 100644 index 00000000..4903f1b4 --- /dev/null +++ b/src/test/java/com/abc/DateUtilsTests/DateCheckerTest.java @@ -0,0 +1,38 @@ +package com.abc.DateUtilsTests; + +import org.junit.Test; + +import com.abc.DateUtils.DateChecker; +import static org.junit.Assert.assertTrue; + +import com.abc.Account; +import com.abc.Bank; +import com.abc.Customer; +import com.abc.Transaction; +import java.util.Date; +import java.util.ArrayList; +import java.util.List; + +public class DateCheckerTest { + @Test + public void testIsWithinLast10Days() { + DateChecker check = new DateChecker(); + Transaction t = new Transaction(5); + Date transactionDate = t.getTransactionDate(); + assertTrue(check.isWithinLast10Days(transactionDate)); + } + + @Test + public void testHasTransactionsWithinLastTenDays() { + Bank bank = new Bank(); + DateChecker dateCheck = new DateChecker(); + Account maxiSaverAccount = new Account(Account.MAXI_SAVINGS); + bank.addCustomer(new Customer("Bill").openAccount(maxiSaverAccount)); + for (int i = 0; i < 5; i++) { + maxiSaverAccount.deposit(3000.0); + } + maxiSaverAccount.withdraw(100); + List transactions = maxiSaverAccount.getTransactionList(); + assertTrue(dateCheck.hasTransactionsWithinLastTenDays(transactions)); + } +} diff --git a/src/test/java/com/abc/TransactionTest.java b/src/test/java/com/abc/TransactionTest.java index 28983234..4b65cd06 100644 --- a/src/test/java/com/abc/TransactionTest.java +++ b/src/test/java/com/abc/TransactionTest.java @@ -2,12 +2,39 @@ import org.junit.Test; +import com.abc.DateUtils.DateProvider; + import static org.junit.Assert.assertTrue; +import java.util.Date; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + public class TransactionTest { + private static final double DOUBLE_DELTA = 1e-15; + @Test - public void transaction() { + public void testValidTransactionInstance() { Transaction t = new Transaction(5); assertTrue(t instanceof Transaction); } + + @Test + public void testGetTransactionAmount() { + Transaction t = new Transaction(5); + assertEquals(5, t.getTransactionAmount(), DOUBLE_DELTA); + } + + @Test + public void testGetTransactionDate() { + Transaction t = new Transaction(5); + assertTrue(t.getTransactionDate() instanceof Date); + } + + @Test + public void testisDateAfter() { + Transaction t = new Transaction(5); + assertFalse(t.isAfter(DateProvider.getInstance().now())); + } } diff --git a/src/test/java/com/abc/TransferServiceTests/MoneyTransferTest.java b/src/test/java/com/abc/TransferServiceTests/MoneyTransferTest.java new file mode 100644 index 00000000..7dfa8cfa --- /dev/null +++ b/src/test/java/com/abc/TransferServiceTests/MoneyTransferTest.java @@ -0,0 +1,37 @@ +package com.abc.TransferServiceTests; + +import org.junit.Test; + +import com.abc.Account; +import com.abc.Bank; +import com.abc.Customer; +import com.abc.TransferServiceUtils.TransferMoney; + +import static org.junit.Assert.assertEquals; + +public class MoneyTransferTest { + private static final double DOUBLE_DELTA = 1e-15; + + @Test + public void testMoneyTransfer() { + Bank bank = new Bank(); + Account checkingAccount = new Account(Account.CHECKING); + Account maxiSavingsAccount = new Account(Account.MAXI_SAVINGS); + + Customer customer = new Customer("Bill"); + bank.addCustomer(customer.openAccount(checkingAccount)); + customer.openAccount(maxiSavingsAccount); + + checkingAccount.deposit(250); + maxiSavingsAccount.deposit(1000); + + TransferMoney transferService = new TransferMoney(); + transferService.moveMoneyBetweenAccounts(checkingAccount, maxiSavingsAccount, 100); + + double newBalance = checkingAccount.getAccountBalance(); + double newSavingsBalance = maxiSavingsAccount.getAccountBalance(); + assertEquals(150, newBalance, DOUBLE_DELTA); + assertEquals(1100, newSavingsBalance, DOUBLE_DELTA); + + } +} From a1ffd5eef00efba28fff49d14d73ce150f2007e4 Mon Sep 17 00:00:00 2001 From: majumdarSammya Date: Wed, 16 Aug 2023 18:43:12 +0100 Subject: [PATCH 2/4] added comments --- src/main/java/com/abc/Account.java | 61 ++++++++++++++----- src/main/java/com/abc/Bank.java | 30 ++++++++- src/main/java/com/abc/Customer.java | 33 ++++++++++ .../java/com/abc/DateUtils/DateChecker.java | 10 +++ .../java/com/abc/DateUtils/DateProvider.java | 7 +++ src/main/java/com/abc/Transaction.java | 15 +++++ .../TransferServiceUtils/TransferMoney.java | 17 ++++-- .../abc/DateUtilsTests/DateCheckerTest.java | 1 - .../MoneyTransferTest.java | 2 +- 9 files changed, 152 insertions(+), 24 deletions(-) rename src/test/java/com/abc/{TransferServiceTests => TransferServiceUtilsTests}/MoneyTransferTest.java (96%) diff --git a/src/main/java/com/abc/Account.java b/src/main/java/com/abc/Account.java index 5d7726de..ab963b23 100644 --- a/src/main/java/com/abc/Account.java +++ b/src/main/java/com/abc/Account.java @@ -1,6 +1,5 @@ package com.abc; -import java.util.Date; import java.util.ArrayList; import java.util.List; @@ -12,6 +11,10 @@ public class Account { public static final int SAVINGS = 1; public static final int MAXI_SAVINGS = 2; + private static final double DEFAULT_INTEREST_RATE = 0.001; + private static final double HIGHER_INTEREST_RATE_SAVINGS = 0.002; + private static final double HIGHER_INTEREST_RATE_MAXI = 0.05; + private final int accountType; public List transactions; DateChecker dateCheck = new DateChecker(); @@ -23,7 +26,10 @@ public Account(int accountType) { } - // add money method + /** + * @param amount + * deposits money into account + */ public void deposit(double amount) { if (amount <= 0) { throw new IllegalArgumentException("amount must be greater than zero"); @@ -32,7 +38,10 @@ public void deposit(double amount) { } } - // withdraw money method + /** + * @param amount + * withdraws money from account + */ public void withdraw(double amount) { if (amount <= 0) { throw new IllegalArgumentException("amount must be greater than zero"); @@ -41,39 +50,56 @@ public void withdraw(double amount) { } } - // calculate checking account interest + /** + * + * @return interest earned in chcecking account + */ public double interestEarnedChecking() { + double amount = getAccountBalance(); - return amount * 0.001; + return amount * DEFAULT_INTEREST_RATE; } - // calculate savings account interest + /** + * + * @return interest earned in savings account + */ public double interestEarnedSavings() { double amount = getAccountBalance(); if (amount <= 1000) - return amount * 0.001; + return amount * DEFAULT_INTEREST_RATE; else - return 1 + (amount - 1000) * 0.002; + return 1 + (amount - 1000) * HIGHER_INTEREST_RATE_SAVINGS; } - // calculate maxi saver account interest + /** + * + * @return interest earned in maxi_savings_account + */ public double interestEarnedMaxiSavings() { double amount = getAccountBalance(); boolean val = dateCheck.hasTransactionsWithinLastTenDays(transactions); if (val) { - return amount * 0.001; + return amount * DEFAULT_INTEREST_RATE; } else { - return amount * 0.05; + return amount * HIGHER_INTEREST_RATE_MAXI; } } - // add transactions + /** + * + * @return account balance + */ public double getAccountBalance() { return checkIfTransactionsExist(true); } - // check validity of transaction + /** + * + * @param checkAll + * @return total amount + */ private double checkIfTransactionsExist(boolean checkAll) { double amount = 0.0; for (Transaction t : transactions) @@ -81,11 +107,18 @@ private double checkIfTransactionsExist(boolean checkAll) { return amount; } - // get account type + /** + * + * @return accountType (int): 0, 1, 2 + */ public int getAccountType() { return accountType; } + /** + * + * @return list of transactions + */ public List getTransactionList() { return transactions; } diff --git a/src/main/java/com/abc/Bank.java b/src/main/java/com/abc/Bank.java index 5483aa4d..81c747cb 100644 --- a/src/main/java/com/abc/Bank.java +++ b/src/main/java/com/abc/Bank.java @@ -10,10 +10,18 @@ public Bank() { customers = new ArrayList(); } + /** + * @param customer + */ public void addCustomer(Customer customer) { customers.add(customer); } + /** + * + * @return customer summary + */ + public String customerSummary() { String summary = "Customer Summary"; for (Customer c : customers) @@ -21,12 +29,25 @@ public String customerSummary() { return summary; } - // Make sure correct plural of word is created based on the number passed in: - // If number passed in is 1 just return the word otherwise add an 's' at the end + /** + * + * @param number + * @param word + * @return plural of word + * Make sure correct plural of word is created based on the number + * passed in: + * If number passed in is 1 just return the word otherwise add an 's' at + * the end + */ private String format(int number, String word) { return number + " " + (number == 1 ? word : word + "s"); } + /** + * + * @return amount + * total interest paid to all customers across accounts + */ public double totalInterestPaid() { double total = 0; for (Customer c : customers) @@ -34,6 +55,11 @@ public double totalInterestPaid() { return total; } + /** + * + * @return name of first customer of the bank + */ + public String getFirstCustomer() { try { return customers.get(0).getName(); diff --git a/src/main/java/com/abc/Customer.java b/src/main/java/com/abc/Customer.java index 7d749b6e..440be332 100644 --- a/src/main/java/com/abc/Customer.java +++ b/src/main/java/com/abc/Customer.java @@ -14,19 +14,36 @@ public Customer(String name) { this.accounts = new ArrayList(); } + /** + * @return String customer name + */ public String getName() { return name; } + /** + * + * @param account + * @return account object + */ public Customer openAccount(Account account) { accounts.add(account); return this; } + /** + * + * @return number of accounts (int) + */ public int getNumberOfAccounts() { return accounts.size(); } + /** + * + * @return total interest + */ + public double totalInterestEarned() { double total = 0; for (Account a : accounts) @@ -39,6 +56,11 @@ else if (a.getAccountType() == 1) return total; } + /** + * + * @return statement across accounts (String) + */ + public String getStatement() { String statement = null; statement = "Statement for " + name + "\n"; @@ -51,6 +73,12 @@ public String getStatement() { return statement; } + /** + * + * @param account + * @return statement for individual account (String) + */ + private String statementForAccount(Account a) { String s = ""; @@ -77,6 +105,11 @@ private String statementForAccount(Account a) { return s; } + /** + * + * @param amount + * @return formatted String to dollars + */ private String toDollars(double d) { return String.format("$%,.2f", abs(d)); } diff --git a/src/main/java/com/abc/DateUtils/DateChecker.java b/src/main/java/com/abc/DateUtils/DateChecker.java index 3a218f75..8f0acb5d 100644 --- a/src/main/java/com/abc/DateUtils/DateChecker.java +++ b/src/main/java/com/abc/DateUtils/DateChecker.java @@ -6,6 +6,11 @@ import com.abc.Transaction; public class DateChecker { + + /** + * @param transactionDate + * @return boolean if given date is in the last 10 days + */ public boolean isWithinLast10Days(Date transactionDate) { Date today = new Date(); @@ -15,6 +20,11 @@ public boolean isWithinLast10Days(Date transactionDate) { return differenceInMillis <= tenDaysInMillis; } + /** + * @param transactions + * @return boolean: true if there is a withdrawal in the last 10 days + */ + public boolean hasTransactionsWithinLastTenDays(List transactions) { Date today = new Date(); diff --git a/src/main/java/com/abc/DateUtils/DateProvider.java b/src/main/java/com/abc/DateUtils/DateProvider.java index 5c150361..5e6c0c95 100644 --- a/src/main/java/com/abc/DateUtils/DateProvider.java +++ b/src/main/java/com/abc/DateUtils/DateProvider.java @@ -6,12 +6,19 @@ public class DateProvider { private static DateProvider instance = null; + /** + * @return DateProvider instance + */ public static DateProvider getInstance() { if (instance == null) instance = new DateProvider(); return instance; } + /** + * + * @return current time (Date) + */ public Date now() { return Calendar.getInstance().getTime(); } diff --git a/src/main/java/com/abc/Transaction.java b/src/main/java/com/abc/Transaction.java index b24be35b..25e7a3b2 100644 --- a/src/main/java/com/abc/Transaction.java +++ b/src/main/java/com/abc/Transaction.java @@ -14,14 +14,29 @@ public Transaction(double amount) { this.transactionDate = DateProvider.getInstance().now(); } + /** + * @return transaction date + */ public Date getTransactionDate() { return transactionDate; } + /** + * + * @return transaction amount + */ public double getTransactionAmount() { return amount; } + /** + * + * @param date + * @return boolean + * True if provided date comes after current date + * False otherwise + */ + public boolean isAfter(Date date) { return transactionDate.after(date); diff --git a/src/main/java/com/abc/TransferServiceUtils/TransferMoney.java b/src/main/java/com/abc/TransferServiceUtils/TransferMoney.java index 8b0e64f0..24741d7d 100644 --- a/src/main/java/com/abc/TransferServiceUtils/TransferMoney.java +++ b/src/main/java/com/abc/TransferServiceUtils/TransferMoney.java @@ -4,12 +4,17 @@ public class TransferMoney { - /* - * moveMoneyBetweenAccounts takes two accounts and a transfer amount as - * arguments - * performs a check if the balance in the source account is higher - * then updates the balance for both the accounts - * if lower balance is detected, throws an error + /** + * @param source + * @param destination + * @param amount + * moveMoneyBetweenAccounts takes two accounts and a transfer + * amount as + * arguments + * performs a check if the balance in the source account is + * higher + * then updates the balance for both the accounts + * if lower balance is detected, throws an error */ public void moveMoneyBetweenAccounts(Account source, Account destination, double amount) { diff --git a/src/test/java/com/abc/DateUtilsTests/DateCheckerTest.java b/src/test/java/com/abc/DateUtilsTests/DateCheckerTest.java index 4903f1b4..7fdadb07 100644 --- a/src/test/java/com/abc/DateUtilsTests/DateCheckerTest.java +++ b/src/test/java/com/abc/DateUtilsTests/DateCheckerTest.java @@ -10,7 +10,6 @@ import com.abc.Customer; import com.abc.Transaction; import java.util.Date; -import java.util.ArrayList; import java.util.List; public class DateCheckerTest { diff --git a/src/test/java/com/abc/TransferServiceTests/MoneyTransferTest.java b/src/test/java/com/abc/TransferServiceUtilsTests/MoneyTransferTest.java similarity index 96% rename from src/test/java/com/abc/TransferServiceTests/MoneyTransferTest.java rename to src/test/java/com/abc/TransferServiceUtilsTests/MoneyTransferTest.java index 7dfa8cfa..5ecfe7d0 100644 --- a/src/test/java/com/abc/TransferServiceTests/MoneyTransferTest.java +++ b/src/test/java/com/abc/TransferServiceUtilsTests/MoneyTransferTest.java @@ -1,4 +1,4 @@ -package com.abc.TransferServiceTests; +package com.abc.TransferServiceUtilsTests; import org.junit.Test; From 32d43c0fbdbdb807dad3622cd942f5a0e939db16 Mon Sep 17 00:00:00 2001 From: majumdarSammya Date: Wed, 16 Aug 2023 18:45:45 +0100 Subject: [PATCH 3/4] refined comments --- src/main/java/com/abc/Account.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/abc/Account.java b/src/main/java/com/abc/Account.java index ab963b23..6fdf021a 100644 --- a/src/main/java/com/abc/Account.java +++ b/src/main/java/com/abc/Account.java @@ -19,7 +19,6 @@ public class Account { public List transactions; DateChecker dateCheck = new DateChecker(); - // account class constructor public Account(int accountType) { this.accountType = accountType; this.transactions = new ArrayList(); @@ -52,7 +51,7 @@ public void withdraw(double amount) { /** * - * @return interest earned in chcecking account + * @return interest earned in checking account */ public double interestEarnedChecking() { From 4a9e633bf71026c7c7bb36248ad2dc232cd34dec Mon Sep 17 00:00:00 2001 From: majumdarSammya Date: Wed, 16 Aug 2023 18:48:25 +0100 Subject: [PATCH 4/4] added comments --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d539fff9..51f0ad97 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ target/ bin/ *.iml -prompts.txt +