From 4946456e5996a29190ec7e186300eca265fb7259 Mon Sep 17 00:00:00 2001 From: Matt Read Date: Wed, 11 Jun 2014 18:07:07 +0100 Subject: [PATCH 1/2] here's my first answer --- .../java/net/digihippo/bread/Account.java | 15 ++++++- .../digihippo/bread/AccountRepository.java | 36 +++++++++++++++- .../java/net/digihippo/bread/BreadShop.java | 41 ++----------------- 3 files changed, 50 insertions(+), 42 deletions(-) diff --git a/src/main/java/net/digihippo/bread/Account.java b/src/main/java/net/digihippo/bread/Account.java index 846a096..38bff21 100644 --- a/src/main/java/net/digihippo/bread/Account.java +++ b/src/main/java/net/digihippo/bread/Account.java @@ -20,7 +20,18 @@ public void addOrder(int orderId, int amount) { orders.put(orderId, amount); } - public Integer cancelOrder(int orderId) { - return orders.remove(orderId); + public void cancelOrder(int accountId, int orderId, OutboundEvents events) { + + Integer cancelledQuantity = orders.remove(orderId); + + if (cancelledQuantity == null) { + events.orderNotFound(accountId, orderId); + return; + } + + int newBalance = this.deposit(cancelledQuantity * BreadShop.PRICE_OF_BREAD); + events.orderCancelled(accountId, orderId); + events.newAccountBalance(accountId, newBalance); + } } diff --git a/src/main/java/net/digihippo/bread/AccountRepository.java b/src/main/java/net/digihippo/bread/AccountRepository.java index a1933c8..0d3241a 100644 --- a/src/main/java/net/digihippo/bread/AccountRepository.java +++ b/src/main/java/net/digihippo/bread/AccountRepository.java @@ -13,7 +13,39 @@ void addAccount(int id, Account newAccount) { accounts.put(id, newAccount); } - Account getAccount(int accountId) { - return accounts.get(accountId); + public void deposit(int accountId, int creditAmount, OutboundEvents events) { + if (!accounts.containsKey(accountId)) { + events.accountNotFound(accountId); + return; + } + final int newBalance = accounts.get(accountId).deposit(creditAmount); + events.newAccountBalance(accountId, newBalance); + } + + public void placeOrder(int accountId, int orderId, int amount, OutboundEvents events) { + if (!accounts.containsKey(accountId)) { + events.accountNotFound(accountId); + return; + } + int cost = amount * BreadShop.PRICE_OF_BREAD; + Account account = accounts.get(accountId); + if (account.getBalance() >= cost) { + account.addOrder(orderId, amount); + int newBalance = account.deposit(-cost); + events.orderPlaced(accountId, amount); + events.newAccountBalance(accountId, newBalance); + } else { + events.orderRejected(accountId); + } + } + + public void cancelOrder(int accountId, int orderId, OutboundEvents events) { + if (!accounts.containsKey(accountId)) { + events.accountNotFound(accountId); + return; + } + + Account account = accounts.get(accountId); + account.cancelOrder(accountId, orderId, events); } } \ No newline at end of file diff --git a/src/main/java/net/digihippo/bread/BreadShop.java b/src/main/java/net/digihippo/bread/BreadShop.java index 1e95d7a..5f294a2 100644 --- a/src/main/java/net/digihippo/bread/BreadShop.java +++ b/src/main/java/net/digihippo/bread/BreadShop.java @@ -17,50 +17,15 @@ public void createAccount(int id) { } public void deposit(int accountId, int creditAmount) { - Account account = accountRepository.getAccount(accountId); - if (account != null) { - final int newBalance = account.deposit(creditAmount); - events.newAccountBalance(accountId, newBalance); - } else { - events.accountNotFound(accountId); - } + accountRepository.deposit(accountId, creditAmount, events); } public void placeOrder(int accountId, int orderId, int amount) { - Account account = accountRepository.getAccount(accountId); - if (account != null) { - int cost = amount * PRICE_OF_BREAD; - if (account.getBalance() >= cost) { - account.addOrder(orderId, amount); - int newBalance = account.deposit(-cost); - events.orderPlaced(accountId, amount); - events.newAccountBalance(accountId, newBalance); - } else { - events.orderRejected(accountId); - } - } else { - events.accountNotFound(accountId); - } + accountRepository.placeOrder(accountId, orderId, amount, events); } public void cancelOrder(int accountId, int orderId) { - Account account = accountRepository.getAccount(accountId); - if (account == null) - { - events.accountNotFound(accountId); - return; - } - - Integer cancelledQuantity = account.cancelOrder(orderId); - if (cancelledQuantity == null) - { - events.orderNotFound(accountId, orderId); - return; - } - - int newBalance = account.deposit(cancelledQuantity * PRICE_OF_BREAD); - events.orderCancelled(accountId, orderId); - events.newAccountBalance(accountId, newBalance); + accountRepository.cancelOrder(accountId, orderId, events); } public void placeWholesaleOrder() { From dd639d456abb5a35aa3e97d051b657473a48abdb Mon Sep 17 00:00:00 2001 From: Matt Read Date: Wed, 11 Jun 2014 18:30:16 +0100 Subject: [PATCH 2/2] now with less return values --- .../java/net/digihippo/bread/Account.java | 22 ++++++++++++------- .../digihippo/bread/AccountRepository.java | 13 ++--------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/main/java/net/digihippo/bread/Account.java b/src/main/java/net/digihippo/bread/Account.java index 38bff21..33b1523 100644 --- a/src/main/java/net/digihippo/bread/Account.java +++ b/src/main/java/net/digihippo/bread/Account.java @@ -7,13 +7,9 @@ public class Account { private int balance = 0; private final Map orders = new HashMap(); - public int getBalance() { - return balance; - } - - public int deposit(int creditAmount) { + public void deposit(int creditAmount, int accountId, OutboundEvents events) { balance += creditAmount; - return balance; + events.newAccountBalance(accountId, balance); } public void addOrder(int orderId, int amount) { @@ -29,9 +25,19 @@ public void cancelOrder(int accountId, int orderId, OutboundEvents events) { return; } - int newBalance = this.deposit(cancelledQuantity * BreadShop.PRICE_OF_BREAD); + this.deposit(cancelledQuantity * BreadShop.PRICE_OF_BREAD, accountId, events); events.orderCancelled(accountId, orderId); - events.newAccountBalance(accountId, newBalance); + } + + public void placeOrder(int accountId, int orderId, int amount, OutboundEvents events) { + int cost = amount * BreadShop.PRICE_OF_BREAD; + if (balance >= cost) { + this.addOrder(orderId, amount); + this.deposit(-cost, accountId, events); + events.orderPlaced(accountId, amount); + } else { + events.orderRejected(accountId); + } } } diff --git a/src/main/java/net/digihippo/bread/AccountRepository.java b/src/main/java/net/digihippo/bread/AccountRepository.java index 0d3241a..09ca697 100644 --- a/src/main/java/net/digihippo/bread/AccountRepository.java +++ b/src/main/java/net/digihippo/bread/AccountRepository.java @@ -18,8 +18,7 @@ public void deposit(int accountId, int creditAmount, OutboundEvents events) { events.accountNotFound(accountId); return; } - final int newBalance = accounts.get(accountId).deposit(creditAmount); - events.newAccountBalance(accountId, newBalance); + accounts.get(accountId).deposit(creditAmount, accountId, events); } public void placeOrder(int accountId, int orderId, int amount, OutboundEvents events) { @@ -27,16 +26,8 @@ public void placeOrder(int accountId, int orderId, int amount, OutboundEvents ev events.accountNotFound(accountId); return; } - int cost = amount * BreadShop.PRICE_OF_BREAD; Account account = accounts.get(accountId); - if (account.getBalance() >= cost) { - account.addOrder(orderId, amount); - int newBalance = account.deposit(-cost); - events.orderPlaced(accountId, amount); - events.newAccountBalance(accountId, newBalance); - } else { - events.orderRejected(accountId); - } + account.placeOrder(accountId, orderId, amount, events); } public void cancelOrder(int accountId, int orderId, OutboundEvents events) {