diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/App.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/App.java index 5554c36df..58b84f2ee 100644 --- a/hexagonal/src/main/java/com/iluwatar/hexagonal/App.java +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/App.java @@ -22,20 +22,98 @@ */ package com.iluwatar.hexagonal; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import com.iluwatar.hexagonal.administration.LotteryAdministration; +import com.iluwatar.hexagonal.administration.LotteryAdministrationImpl; +import com.iluwatar.hexagonal.domain.LotteryNumbers; +import com.iluwatar.hexagonal.domain.LotteryTicket; +import com.iluwatar.hexagonal.domain.PlayerDetails; +import com.iluwatar.hexagonal.service.LotteryService; +import com.iluwatar.hexagonal.service.LotteryServiceImpl; + /** * * Example application demonstrating Hexagonal Architecture * */ public class App { + + private static List allPlayerDetails; + + static { + allPlayerDetails = new ArrayList<>(); + allPlayerDetails.add(PlayerDetails.create("john@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("mary@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("steve@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("wayne@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("johnie@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("andy@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("richard@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("kevin@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("arnold@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("ian@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("robin@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("ted@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("larry@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("calvin@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("jacob@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("edwin@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("mary@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("lolita@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("bruno@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("peter@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("warren@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("monica@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("ollie@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("yngwie@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("lars@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("bobbie@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("tyron@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("tyrell@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("nadja@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("wendy@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("luke@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("bjorn@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("lisa@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("anton@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("bruce@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("ray@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("ron@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("xavier@google.com", "312-342", "+3242434242")); + allPlayerDetails.add(PlayerDetails.create("harriet@google.com", "312-342", "+3242434242")); + } + /** * Program entry point */ public static void main(String[] args) { + // start new lottery round + LotteryAdministration administartion = new LotteryAdministrationImpl(); + administartion.resetLottery(); + // submit some lottery tickets + LotteryServiceImpl service = new LotteryServiceImpl(); + submitTickets(service, 20); + + int i = administartion.getAllSubmittedTickets().size(); // perform lottery - - // check all the tickets + administartion.performLottery(); + } + + private static void submitTickets(LotteryService lotteryService, int numTickets) { + for (int i=0; i tickets = getAllSubmittedTickets(); for (LotteryTicketId id: tickets.keySet()) { LotteryTicketCheckResult result = service.checkTicketForPrize(id, numbers); - if (result.equals(CheckResult.WIN_PRIZE)) { + if (result.getResult().equals(CheckResult.WIN_PRIZE)) { bank.transferFunds(WIN_AMOUNT, PRIZE_PAYER_BANK_ACCOUNT, tickets.get(id).getPlayerDetails().getBankAccount()); notifications.notifyPrize(tickets.get(id).getPlayerDetails(), WIN_AMOUNT); - } else if (result.equals(CheckResult.NO_PRIZE)) { + } else if (result.getResult().equals(CheckResult.NO_PRIZE)) { notifications.notifyNoWin(tickets.get(id).getPlayerDetails()); } } diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/notifications/LotteryNotificationsImpl.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/notifications/LotteryNotificationsImpl.java index d91aacec0..c2e02ddbd 100644 --- a/hexagonal/src/main/java/com/iluwatar/hexagonal/notifications/LotteryNotificationsImpl.java +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/notifications/LotteryNotificationsImpl.java @@ -41,7 +41,7 @@ public class LotteryNotificationsImpl implements LotteryNotifications { @Override public void notifyPrize(PlayerDetails details, int prizeAmount) { System.out - .println(String.format("Lottery ticket for %s has won! Your bank account %s was deposited with %d credits.", + .println(String.format("Lottery ticket for %s has won! The bank account %s was deposited with %d credits.", details.getEmail(), details.getBankAccount(), prizeAmount)); } } 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 7da7b2f1d..e595393df 100644 --- a/hexagonal/src/main/java/com/iluwatar/hexagonal/service/LotteryServiceImpl.java +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/service/LotteryServiceImpl.java @@ -43,6 +43,10 @@ import com.iluwatar.hexagonal.notifications.LotteryNotificationsImpl; */ public class LotteryServiceImpl implements LotteryService { + private static final String LOTTERY_SERVICE_BANK_ACCOUNT = "123-123"; + + private static final int TICKET_PRIZE = 3; + private final LotteryTicketRepository repository; private final WireTransfers bank = new WireTransfersImpl(); @@ -55,7 +59,7 @@ public class LotteryServiceImpl implements LotteryService { @Override public Optional submitTicket(LotteryTicket ticket) { - bank.transferFunds(3, ticket.getPlayerDetails().getBankAccount(), "123-123"); + bank.transferFunds(TICKET_PRIZE, ticket.getPlayerDetails().getBankAccount(), LOTTERY_SERVICE_BANK_ACCOUNT); Optional optional = repository.save(ticket); if (optional.isPresent()) { notifications.notifyTicketSubmitted(ticket.getPlayerDetails());