Add example lottery run
This commit is contained in:
@ -22,20 +22,98 @@
|
|||||||
*/
|
*/
|
||||||
package com.iluwatar.hexagonal;
|
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
|
* Example application demonstrating Hexagonal Architecture
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class App {
|
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
|
* Program entry point
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
// start new lottery round
|
||||||
|
LotteryAdministration administartion = new LotteryAdministrationImpl();
|
||||||
|
administartion.resetLottery();
|
||||||
|
|
||||||
// submit some lottery tickets
|
// submit some lottery tickets
|
||||||
|
LotteryServiceImpl service = new LotteryServiceImpl();
|
||||||
|
submitTickets(service, 20);
|
||||||
|
|
||||||
|
int i = administartion.getAllSubmittedTickets().size();
|
||||||
|
|
||||||
// perform lottery
|
// perform lottery
|
||||||
|
administartion.performLottery();
|
||||||
// check all the tickets
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,10 +72,10 @@ public class LotteryAdministrationImpl implements LotteryAdministration {
|
|||||||
Map<LotteryTicketId, LotteryTicket> tickets = getAllSubmittedTickets();
|
Map<LotteryTicketId, LotteryTicket> tickets = getAllSubmittedTickets();
|
||||||
for (LotteryTicketId id: tickets.keySet()) {
|
for (LotteryTicketId id: tickets.keySet()) {
|
||||||
LotteryTicketCheckResult result = service.checkTicketForPrize(id, numbers);
|
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());
|
bank.transferFunds(WIN_AMOUNT, PRIZE_PAYER_BANK_ACCOUNT, tickets.get(id).getPlayerDetails().getBankAccount());
|
||||||
notifications.notifyPrize(tickets.get(id).getPlayerDetails(), WIN_AMOUNT);
|
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());
|
notifications.notifyNoWin(tickets.get(id).getPlayerDetails());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ public class LotteryNotificationsImpl implements LotteryNotifications {
|
|||||||
@Override
|
@Override
|
||||||
public void notifyPrize(PlayerDetails details, int prizeAmount) {
|
public void notifyPrize(PlayerDetails details, int prizeAmount) {
|
||||||
System.out
|
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));
|
details.getEmail(), details.getBankAccount(), prizeAmount));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,10 @@ import com.iluwatar.hexagonal.notifications.LotteryNotificationsImpl;
|
|||||||
*/
|
*/
|
||||||
public class LotteryServiceImpl implements LotteryService {
|
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 LotteryTicketRepository repository;
|
||||||
|
|
||||||
private final WireTransfers bank = new WireTransfersImpl();
|
private final WireTransfers bank = new WireTransfersImpl();
|
||||||
@ -55,7 +59,7 @@ public class LotteryServiceImpl implements LotteryService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<LotteryTicketId> submitTicket(LotteryTicket ticket) {
|
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);
|
Optional<LotteryTicketId> optional = repository.save(ticket);
|
||||||
if (optional.isPresent()) {
|
if (optional.isPresent()) {
|
||||||
notifications.notifyTicketSubmitted(ticket.getPlayerDetails());
|
notifications.notifyTicketSubmitted(ticket.getPlayerDetails());
|
||||||
|
Reference in New Issue
Block a user