diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/administration/LotteryAdministrationImpl.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/administration/LotteryAdministrationImpl.java index 3d0327fe1..93c68e825 100644 --- a/hexagonal/src/main/java/com/iluwatar/hexagonal/administration/LotteryAdministrationImpl.java +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/administration/LotteryAdministrationImpl.java @@ -24,11 +24,19 @@ package com.iluwatar.hexagonal.administration; import java.util.Map; +import com.iluwatar.hexagonal.banking.WireTransfers; +import com.iluwatar.hexagonal.banking.WireTransfersImpl; import com.iluwatar.hexagonal.database.LotteryTicketRepository; import com.iluwatar.hexagonal.database.LotteryTicketRepositoryMock; import com.iluwatar.hexagonal.domain.LotteryNumbers; import com.iluwatar.hexagonal.domain.LotteryTicket; +import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult; +import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult.CheckResult; import com.iluwatar.hexagonal.domain.LotteryTicketId; +import com.iluwatar.hexagonal.notifications.LotteryNotifications; +import com.iluwatar.hexagonal.notifications.LotteryNotificationsImpl; +import com.iluwatar.hexagonal.service.LotteryService; +import com.iluwatar.hexagonal.service.LotteryServiceImpl; /** * @@ -39,6 +47,12 @@ public class LotteryAdministrationImpl implements LotteryAdministration { private final LotteryTicketRepository repository; + private final LotteryService service = new LotteryServiceImpl(); + + private final LotteryNotifications notifications = new LotteryNotificationsImpl(); + + private final WireTransfers bank = new WireTransfersImpl(); + public LotteryAdministrationImpl() { repository = new LotteryTicketRepositoryMock(); } @@ -50,7 +64,18 @@ public class LotteryAdministrationImpl implements LotteryAdministration { @Override public LotteryNumbers performLottery() { - return LotteryNumbers.createRandom(); + LotteryNumbers numbers = LotteryNumbers.createRandom(); + Map tickets = getAllSubmittedTickets(); + for (LotteryTicketId id: tickets.keySet()) { + LotteryTicketCheckResult result = service.checkTicketForPrize(id, numbers); + if (result.equals(CheckResult.WIN_PRIZE)) { + bank.transferFunds(1000, "123-123", tickets.get(id).getPlayerDetails().getBankAccount()); + notifications.notifyPrize(tickets.get(id).getPlayerDetails(), 1000); + } else if (result.equals(CheckResult.NO_PRIZE)) { + notifications.notifyNoWin(tickets.get(id).getPlayerDetails()); + } + } + return numbers; } @Override diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/banking/WireTransfersImpl.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/banking/WireTransfersImpl.java index 2ca639a37..114ca4b31 100644 --- a/hexagonal/src/main/java/com/iluwatar/hexagonal/banking/WireTransfersImpl.java +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/banking/WireTransfersImpl.java @@ -34,6 +34,10 @@ public class WireTransfersImpl implements WireTransfers { private static Map accounts = new HashMap<>(); + static { + accounts.put("123-123", 50000); + } + @Override public void setFunds(String bankAccount, int amount) { accounts.put(bankAccount, amount); diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/service/LotteryServiceImpl.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/service/LotteryServiceImpl.java index af5b28f7a..7da7b2f1d 100644 --- a/hexagonal/src/main/java/com/iluwatar/hexagonal/service/LotteryServiceImpl.java +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/service/LotteryServiceImpl.java @@ -24,6 +24,8 @@ package com.iluwatar.hexagonal.service; import java.util.Optional; +import com.iluwatar.hexagonal.banking.WireTransfers; +import com.iluwatar.hexagonal.banking.WireTransfersImpl; import com.iluwatar.hexagonal.database.LotteryTicketRepository; import com.iluwatar.hexagonal.database.LotteryTicketRepositoryMock; import com.iluwatar.hexagonal.domain.LotteryNumbers; @@ -31,6 +33,8 @@ import com.iluwatar.hexagonal.domain.LotteryTicket; import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult; import com.iluwatar.hexagonal.domain.LotteryTicketId; import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult.CheckResult; +import com.iluwatar.hexagonal.notifications.LotteryNotifications; +import com.iluwatar.hexagonal.notifications.LotteryNotificationsImpl; /** * @@ -40,6 +44,10 @@ import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult.CheckResult; public class LotteryServiceImpl implements LotteryService { private final LotteryTicketRepository repository; + + private final WireTransfers bank = new WireTransfersImpl(); + + private final LotteryNotifications notifications = new LotteryNotificationsImpl(); public LotteryServiceImpl() { repository = new LotteryTicketRepositoryMock(); @@ -47,7 +55,12 @@ public class LotteryServiceImpl implements LotteryService { @Override public Optional submitTicket(LotteryTicket ticket) { - return repository.save(ticket); + bank.transferFunds(3, ticket.getPlayerDetails().getBankAccount(), "123-123"); + Optional optional = repository.save(ticket); + if (optional.isPresent()) { + notifications.notifyTicketSubmitted(ticket.getPlayerDetails()); + } + return optional; } @Override