diff --git a/Diagram.png b/Diagram.png new file mode 100644 index 000000000..605b224bb Binary files /dev/null and b/Diagram.png differ diff --git a/src/main/java/com/booleanuk/core/.gitkeep b/domain-model.md similarity index 100% rename from src/main/java/com/booleanuk/core/.gitkeep rename to domain-model.md diff --git a/src/main/java/com/booleanuk/core/Account.java b/src/main/java/com/booleanuk/core/Account.java new file mode 100644 index 000000000..c39b3e2e4 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Account.java @@ -0,0 +1,103 @@ +package com.booleanuk.core; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +public abstract class Account { + private UUID id; + private UUID CustomerUUID; + private List transactions; + private AccountType accountType; + + public Account(UUID CustomerUUID, AccountType accountType) { + this.id = UUID.randomUUID(); + this.CustomerUUID = CustomerUUID; + this.transactions = new ArrayList(); + this.accountType = accountType; + } + + public void addTransaction(double amount) { + this.transactions.add(new Transaction(amount)); + } + + public double calculateBalance() { + return transactions.stream().mapToDouble(Transaction::getAmount).sum(); + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public UUID getCustomerUUID() { + return CustomerUUID; + } + + public void setCustomerUUID(UUID customerUUID) { + CustomerUUID = customerUUID; + } + + public List getTransactions() { + return transactions; + } + + public void setTransactions(List transactions) { + this.transactions = transactions; + } + + public AccountType getAccountType() { + return accountType; + } + + public void setAccountType(AccountType accountType) { + this.accountType = accountType; + } + + @Override + public String toString() { + return "Account{" + + "id=" + id + + ", CustomerUUID=" + CustomerUUID + + ", transactions=" + transactions + + ", accountType=" + accountType + + '}'; + } + + public void printAccountStatement() { + + final String rowFmt = "%-15s||%15s||%15s||%15s%n"; + System.out.printf(rowFmt,"date", "credit", "debit", "balance"); + + // Date Innskudd Utrekk Balanse + double balance = 0; + + for (Transaction transaction : transactions) { + String transactionDate = transaction.getDate().toString(); + double amount = transaction.getAmount(); + String credit = ""; + String debit = ""; + + if(amount <= 0) { + debit = Double.toString( + Math.abs(amount)); + } + else{ + credit = Double.toString( + amount); + } + + balance = balance + amount; + + System.out.printf(rowFmt,transactionDate, credit, debit, balance); + + } + } +} + diff --git a/src/main/java/com/booleanuk/core/AccountType.java b/src/main/java/com/booleanuk/core/AccountType.java new file mode 100644 index 000000000..9262aef86 --- /dev/null +++ b/src/main/java/com/booleanuk/core/AccountType.java @@ -0,0 +1,6 @@ +package com.booleanuk.core; + +public enum AccountType { + CURRENT, + SAVINGS +} diff --git a/src/main/java/com/booleanuk/core/BankManager.java b/src/main/java/com/booleanuk/core/BankManager.java new file mode 100644 index 000000000..33c5339a6 --- /dev/null +++ b/src/main/java/com/booleanuk/core/BankManager.java @@ -0,0 +1,10 @@ +package com.booleanuk.core; + +import java.util.ArrayList; +import java.util.List; + +public class BankManager { + private String name; + private ArrayList branchUUIDs; + +} \ No newline at end of file diff --git a/src/main/java/com/booleanuk/core/Branch.java b/src/main/java/com/booleanuk/core/Branch.java new file mode 100644 index 000000000..b081398ec --- /dev/null +++ b/src/main/java/com/booleanuk/core/Branch.java @@ -0,0 +1,37 @@ +package com.booleanuk.core; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class Branch { + private List accounts; + private UUID id; + private String name; + + public Branch(String name) { + this.name = name; + this.accounts = new ArrayList(); + this.id = UUID.randomUUID(); + } + + public void createSavingsAccountForUser(UUID customerId) { + this.accounts.add(new SavingsAccount(customerId)); + } + + public void createCurrentAccountForUser(UUID customerId) { + this.accounts.add(new CurrentAccount(customerId)); + } + + public List getAccountsForCustomerID(UUID customerId) { + return this.accounts.stream() + .filter(account -> account.getCustomerUUID().equals(customerId)) + .toList(); + } + + public List getAccountsForAccountID(UUID accountID) { + return this.accounts.stream() + .filter(account -> account.getId().equals(accountID)) + .toList(); + } +} \ No newline at end of file diff --git a/src/main/java/com/booleanuk/core/CurrentAccount.java b/src/main/java/com/booleanuk/core/CurrentAccount.java new file mode 100644 index 000000000..2e055e25c --- /dev/null +++ b/src/main/java/com/booleanuk/core/CurrentAccount.java @@ -0,0 +1,33 @@ +package com.booleanuk.core; + +import java.util.UUID; +import com.booleanuk.core.AccountType; + +public class CurrentAccount extends Account { + private static final AccountType accountType = AccountType.CURRENT; + private double overdraftLimit; + private boolean overdraftApproved; + + public CurrentAccount(UUID CustomerUUID) { + super(CustomerUUID, accountType); + this.overdraftLimit = 0; + this.overdraftApproved = false; + } + + public double getOverdraftLimit() { + return overdraftLimit; + } + + public void setOverdraftLimit(double overdraftLimit) { + this.overdraftApproved = false; + this.overdraftLimit = overdraftLimit; + } + + public boolean isOverdraftApproved() { + return overdraftApproved; + } + + public void setOverdraftApproved(boolean overdraftApproved) { + this.overdraftApproved = overdraftApproved; + } +} diff --git a/src/main/java/com/booleanuk/core/Customer.java b/src/main/java/com/booleanuk/core/Customer.java new file mode 100644 index 000000000..af9a4c560 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Customer.java @@ -0,0 +1,22 @@ +package com.booleanuk.core; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class Customer extends User { + + private List accountUUIDs; + public Customer(String name) { + super(name); + this.accountUUIDs = new ArrayList(); + } + + public List getAccountUUIDs() { + return accountUUIDs; + } + + public void addAccount(UUID accountUUID) { + this.accountUUIDs.add(accountUUID); + } +} diff --git a/src/main/java/com/booleanuk/core/SavingsAccount.java b/src/main/java/com/booleanuk/core/SavingsAccount.java new file mode 100644 index 000000000..7c991dc9b --- /dev/null +++ b/src/main/java/com/booleanuk/core/SavingsAccount.java @@ -0,0 +1,13 @@ +package com.booleanuk.core; + +import java.util.UUID; + +public class SavingsAccount extends Account { + private float interestRate; + private static final AccountType accountType = AccountType.SAVINGS; + + public SavingsAccount(UUID CustomerUUID) { + super(CustomerUUID, accountType); + this.interestRate = 0; + } +} diff --git a/src/main/java/com/booleanuk/core/Transaction.java b/src/main/java/com/booleanuk/core/Transaction.java new file mode 100644 index 000000000..fce6704b8 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Transaction.java @@ -0,0 +1,40 @@ +package com.booleanuk.core; + +import java.time.LocalDate; +import java.util.UUID; + +public class Transaction { + private double amount; + private LocalDate date; + private UUID id; + + public Transaction(double amount) { + this.date = LocalDate.now(); + this.amount = amount; + this.id = UUID.randomUUID(); + } + + public double getAmount() { + return amount; + } + + public void setAmount(float amount) { + this.amount = amount; + } + + public LocalDate getDate() { + return date; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } +} diff --git a/src/main/java/com/booleanuk/core/User.java b/src/main/java/com/booleanuk/core/User.java new file mode 100644 index 000000000..312db0f41 --- /dev/null +++ b/src/main/java/com/booleanuk/core/User.java @@ -0,0 +1,29 @@ +package com.booleanuk.core; + +import java.util.UUID; + +public abstract class User { + private UUID uuid; + private String name; + + public User(String name) { + this.uuid = java.util.UUID.randomUUID(); + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public UUID getUUID() { + return uuid; + } + + public void setUUID(UUID uuid) { + this.uuid = uuid; + } +} diff --git a/src/test/java/com/booleanuk/core/.gitkeep b/src/test/java/com/booleanuk/core/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/test/java/com/booleanuk/core/AccountTest.java b/src/test/java/com/booleanuk/core/AccountTest.java new file mode 100644 index 000000000..520cd8e74 --- /dev/null +++ b/src/test/java/com/booleanuk/core/AccountTest.java @@ -0,0 +1,39 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class AccountTest { + + @Test + public void addTransaction() { + Branch testBranch = new Branch("oslo"); + User testCustomer = new Customer("Trond Giske"); + UUID testUserUUID = testCustomer.getUUID(); + + testBranch.createCurrentAccountForUser(testUserUUID); + Account testAccount = testBranch.getAccountsForCustomerID(testUserUUID).getFirst(); + testAccount.addTransaction(1000.99); + Transaction testTransaction = testAccount.getTransactions().getFirst(); + + assertEquals(1000.99, testTransaction.getAmount()); + } + + @Test + public void calculateBalance() { + Branch testBranch = new Branch("oslo"); + User testCustomer = new Customer("Trond Giske"); + UUID testUserUUID = testCustomer.getUUID(); + + testBranch.createCurrentAccountForUser(testUserUUID); + Account testAccount = testBranch.getAccountsForCustomerID(testUserUUID).getFirst(); + testAccount.addTransaction(1000.99); + testAccount.addTransaction(1000.99); + + assertEquals(2001.98, testAccount.calculateBalance()); + } +} diff --git a/src/test/java/com/booleanuk/core/BankManagerTest.java b/src/test/java/com/booleanuk/core/BankManagerTest.java new file mode 100644 index 000000000..3c310f4f0 --- /dev/null +++ b/src/test/java/com/booleanuk/core/BankManagerTest.java @@ -0,0 +1,13 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class BankManagerTest { + @Test + public void testBankManager() { + // Nothing to test here except getters and setters + assertTrue(true); + } +} diff --git a/src/test/java/com/booleanuk/core/BranchTest.java b/src/test/java/com/booleanuk/core/BranchTest.java new file mode 100644 index 000000000..0290d76c4 --- /dev/null +++ b/src/test/java/com/booleanuk/core/BranchTest.java @@ -0,0 +1,74 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; + +public class BranchTest { + + @Test + public void createSavingsAccountForUser() { + Branch testBranch = new Branch("oslo"); + User testCustomer = new Customer("Trond Giske"); + + testBranch.createSavingsAccountForUser(testCustomer.getUUID()); + testBranch.getAccountsForCustomerID(testCustomer.getUUID()); + } + + @Test + public void createCurrentAccountForUser() { + Branch testBranch = new Branch("oslo"); + User testCustomer = new Customer("Trond Giske"); + + testBranch.createCurrentAccountForUser(testCustomer.getUUID()); + + assertNotNull(testBranch.getAccountsForCustomerID(testCustomer.getUUID())); + } + + @Test + public void getAccountsForCustomerID() { + Branch testBranch = new Branch("oslo"); + User testCustomer = new Customer("Trond Giske"); + UUID testUserUUID = testCustomer.getUUID(); + + testBranch.createCurrentAccountForUser(testUserUUID); + + assertNotNull(testBranch.getAccountsForCustomerID(testUserUUID)); + } + + @Test + public void getAccountsForAccountID() { + Branch testBranch = new Branch("oslo"); + User testCustomer = new Customer("Trond Giske"); + UUID testUserUUID = testCustomer.getUUID(); + + testBranch.createCurrentAccountForUser(testUserUUID); + + List testAccount = testBranch.getAccountsForCustomerID(testUserUUID); + UUID testAccountUUID = testAccount.getFirst().getId(); + + assertNotNull(testBranch.getAccountsForAccountID(testAccountUUID)); + } + + @Test void testEverything() { + Branch testBranch = new Branch("oslo"); + User testCustomer = new Customer("Trond Giske"); + UUID testUserUUID = testCustomer.getUUID(); + + testBranch.createCurrentAccountForUser(testUserUUID); + CurrentAccount testAccount = (CurrentAccount) testBranch.getAccountsForCustomerID(testUserUUID).getFirst(); + + testAccount.addTransaction(1000); + testAccount.addTransaction(2000); + testAccount.addTransaction(-500); + + testAccount.printAccountStatement(); + + assertEquals(2500, testAccount.calculateBalance()); + + + } +} diff --git a/src/test/java/com/booleanuk/core/CurrentAccountTest.java b/src/test/java/com/booleanuk/core/CurrentAccountTest.java new file mode 100644 index 000000000..a3ebcca88 --- /dev/null +++ b/src/test/java/com/booleanuk/core/CurrentAccountTest.java @@ -0,0 +1,29 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Test; + +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; + +public class CurrentAccountTest { + + @Test + public void testOverdraftLimit() { + Branch testBranch = new Branch("oslo"); + User testCustomer = new Customer("Trond Giske"); + UUID testUserUUID = testCustomer.getUUID(); + + testBranch.createCurrentAccountForUser(testUserUUID); + CurrentAccount testAccount = (CurrentAccount) testBranch.getAccountsForCustomerID(testUserUUID).getFirst(); + + testAccount.setOverdraftLimit(222); + assertEquals(222, testAccount.getOverdraftLimit()); + + testAccount.setOverdraftApproved(true); + assertTrue(testAccount.isOverdraftApproved()); + + testAccount.setOverdraftLimit(333); + assertFalse(testAccount.isOverdraftApproved()); + } +} diff --git a/src/test/java/com/booleanuk/core/CustomerTest.java b/src/test/java/com/booleanuk/core/CustomerTest.java new file mode 100644 index 000000000..5c7b385c2 --- /dev/null +++ b/src/test/java/com/booleanuk/core/CustomerTest.java @@ -0,0 +1,13 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class CustomerTest { + @Test + public void testCustomer() { + // Nothing to test here except getters and setters + assertTrue(true); + } +} diff --git a/src/test/java/com/booleanuk/core/SavingsAccountTest.java b/src/test/java/com/booleanuk/core/SavingsAccountTest.java new file mode 100644 index 000000000..fb64b3e7c --- /dev/null +++ b/src/test/java/com/booleanuk/core/SavingsAccountTest.java @@ -0,0 +1,26 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Test; + +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class SavingsAccountTest { + + @Test + public void testSavingsAccount() { + // Didn't get around to implement interest rate + // The class should behave the same way that current account works, with the accountType field set to 'SAVINGS' + + Branch testBranch = new Branch("oslo"); + User testCustomer = new Customer("Trond Giske"); + UUID testUserUUID = testCustomer.getUUID(); + + testBranch.createSavingsAccountForUser(testUserUUID); + SavingsAccount testAccount = (SavingsAccount) testBranch.getAccountsForCustomerID(testUserUUID).getFirst(); + + assertEquals(AccountType.SAVINGS, testAccount.getAccountType()); + } +} diff --git a/src/test/java/com/booleanuk/core/TransactionTest.java b/src/test/java/com/booleanuk/core/TransactionTest.java new file mode 100644 index 000000000..e94706ea5 --- /dev/null +++ b/src/test/java/com/booleanuk/core/TransactionTest.java @@ -0,0 +1,14 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class TransactionTest { + + @Test + public void testTransaction() { + // Nothing to test here except getters and setters + assertTrue(true); + } +} diff --git a/src/test/java/com/booleanuk/core/UserTest.java b/src/test/java/com/booleanuk/core/UserTest.java new file mode 100644 index 000000000..ea81aaaf5 --- /dev/null +++ b/src/test/java/com/booleanuk/core/UserTest.java @@ -0,0 +1,13 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class UserTest { + @Test + public void testUser() { + // Nothing to test here except getters and setters + assertTrue(true); + } +}