Add example lottery run

This commit is contained in:
Ilkka Seppälä
2016-04-09 16:01:47 +03:00
parent b94a705161
commit 48803d4c7d
4 changed files with 88 additions and 6 deletions

View File

@ -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<PlayerDetails> 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<numTickets; i++) {
LotteryTicket ticket = LotteryTicket.create(getRandomPlayerDetails(), LotteryNumbers.createRandom());
lotteryService.submitTicket(ticket);
}
}
private static PlayerDetails getRandomPlayerDetails() {
Random random = new Random();
int idx = random.nextInt(allPlayerDetails.size());
return allPlayerDetails.get(idx);
}
}

View File

@ -72,10 +72,10 @@ public class LotteryAdministrationImpl implements LotteryAdministration {
Map<LotteryTicketId, LotteryTicket> 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());
}
}

View File

@ -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));
}
}

View File

@ -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<LotteryTicketId> submitTicket(LotteryTicket ticket) {
bank.transferFunds(3, ticket.getPlayerDetails().getBankAccount(), "123-123");
bank.transferFunds(TICKET_PRIZE, ticket.getPlayerDetails().getBankAccount(), LOTTERY_SERVICE_BANK_ACCOUNT);
Optional<LotteryTicketId> optional = repository.save(ticket);
if (optional.isPresent()) {
notifications.notifyTicketSubmitted(ticket.getPlayerDetails());