Skip to content

Commit 48803d4

Browse files
committed
Add example lottery run
1 parent b94a705 commit 48803d4

File tree

4 files changed

+88
-6
lines changed

4 files changed

+88
-6
lines changed

hexagonal/src/main/java/com/iluwatar/hexagonal/App.java

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,98 @@
2222
*/
2323
package com.iluwatar.hexagonal;
2424

25+
import java.util.ArrayList;
26+
import java.util.List;
27+
import java.util.Random;
28+
29+
import com.iluwatar.hexagonal.administration.LotteryAdministration;
30+
import com.iluwatar.hexagonal.administration.LotteryAdministrationImpl;
31+
import com.iluwatar.hexagonal.domain.LotteryNumbers;
32+
import com.iluwatar.hexagonal.domain.LotteryTicket;
33+
import com.iluwatar.hexagonal.domain.PlayerDetails;
34+
import com.iluwatar.hexagonal.service.LotteryService;
35+
import com.iluwatar.hexagonal.service.LotteryServiceImpl;
36+
2537
/**
2638
*
2739
* Example application demonstrating Hexagonal Architecture
2840
*
2941
*/
3042
public class App {
43+
44+
private static List<PlayerDetails> allPlayerDetails;
45+
46+
static {
47+
allPlayerDetails = new ArrayList<>();
48+
allPlayerDetails.add(PlayerDetails.create("john@google.com", "312-342", "+3242434242"));
49+
allPlayerDetails.add(PlayerDetails.create("mary@google.com", "312-342", "+3242434242"));
50+
allPlayerDetails.add(PlayerDetails.create("steve@google.com", "312-342", "+3242434242"));
51+
allPlayerDetails.add(PlayerDetails.create("wayne@google.com", "312-342", "+3242434242"));
52+
allPlayerDetails.add(PlayerDetails.create("johnie@google.com", "312-342", "+3242434242"));
53+
allPlayerDetails.add(PlayerDetails.create("andy@google.com", "312-342", "+3242434242"));
54+
allPlayerDetails.add(PlayerDetails.create("richard@google.com", "312-342", "+3242434242"));
55+
allPlayerDetails.add(PlayerDetails.create("kevin@google.com", "312-342", "+3242434242"));
56+
allPlayerDetails.add(PlayerDetails.create("arnold@google.com", "312-342", "+3242434242"));
57+
allPlayerDetails.add(PlayerDetails.create("ian@google.com", "312-342", "+3242434242"));
58+
allPlayerDetails.add(PlayerDetails.create("robin@google.com", "312-342", "+3242434242"));
59+
allPlayerDetails.add(PlayerDetails.create("ted@google.com", "312-342", "+3242434242"));
60+
allPlayerDetails.add(PlayerDetails.create("larry@google.com", "312-342", "+3242434242"));
61+
allPlayerDetails.add(PlayerDetails.create("calvin@google.com", "312-342", "+3242434242"));
62+
allPlayerDetails.add(PlayerDetails.create("jacob@google.com", "312-342", "+3242434242"));
63+
allPlayerDetails.add(PlayerDetails.create("edwin@google.com", "312-342", "+3242434242"));
64+
allPlayerDetails.add(PlayerDetails.create("mary@google.com", "312-342", "+3242434242"));
65+
allPlayerDetails.add(PlayerDetails.create("lolita@google.com", "312-342", "+3242434242"));
66+
allPlayerDetails.add(PlayerDetails.create("bruno@google.com", "312-342", "+3242434242"));
67+
allPlayerDetails.add(PlayerDetails.create("peter@google.com", "312-342", "+3242434242"));
68+
allPlayerDetails.add(PlayerDetails.create("warren@google.com", "312-342", "+3242434242"));
69+
allPlayerDetails.add(PlayerDetails.create("monica@google.com", "312-342", "+3242434242"));
70+
allPlayerDetails.add(PlayerDetails.create("ollie@google.com", "312-342", "+3242434242"));
71+
allPlayerDetails.add(PlayerDetails.create("yngwie@google.com", "312-342", "+3242434242"));
72+
allPlayerDetails.add(PlayerDetails.create("lars@google.com", "312-342", "+3242434242"));
73+
allPlayerDetails.add(PlayerDetails.create("bobbie@google.com", "312-342", "+3242434242"));
74+
allPlayerDetails.add(PlayerDetails.create("tyron@google.com", "312-342", "+3242434242"));
75+
allPlayerDetails.add(PlayerDetails.create("tyrell@google.com", "312-342", "+3242434242"));
76+
allPlayerDetails.add(PlayerDetails.create("nadja@google.com", "312-342", "+3242434242"));
77+
allPlayerDetails.add(PlayerDetails.create("wendy@google.com", "312-342", "+3242434242"));
78+
allPlayerDetails.add(PlayerDetails.create("luke@google.com", "312-342", "+3242434242"));
79+
allPlayerDetails.add(PlayerDetails.create("bjorn@google.com", "312-342", "+3242434242"));
80+
allPlayerDetails.add(PlayerDetails.create("lisa@google.com", "312-342", "+3242434242"));
81+
allPlayerDetails.add(PlayerDetails.create("anton@google.com", "312-342", "+3242434242"));
82+
allPlayerDetails.add(PlayerDetails.create("bruce@google.com", "312-342", "+3242434242"));
83+
allPlayerDetails.add(PlayerDetails.create("ray@google.com", "312-342", "+3242434242"));
84+
allPlayerDetails.add(PlayerDetails.create("ron@google.com", "312-342", "+3242434242"));
85+
allPlayerDetails.add(PlayerDetails.create("xavier@google.com", "312-342", "+3242434242"));
86+
allPlayerDetails.add(PlayerDetails.create("harriet@google.com", "312-342", "+3242434242"));
87+
}
88+
3189
/**
3290
* Program entry point
3391
*/
3492
public static void main(String[] args) {
93+
// start new lottery round
94+
LotteryAdministration administartion = new LotteryAdministrationImpl();
95+
administartion.resetLottery();
96+
3597
// submit some lottery tickets
98+
LotteryServiceImpl service = new LotteryServiceImpl();
99+
submitTickets(service, 20);
36100

37-
// perform lottery
101+
int i = administartion.getAllSubmittedTickets().size();
38102

39-
// check all the tickets
103+
// perform lottery
104+
administartion.performLottery();
105+
}
106+
107+
private static void submitTickets(LotteryService lotteryService, int numTickets) {
108+
for (int i=0; i<numTickets; i++) {
109+
LotteryTicket ticket = LotteryTicket.create(getRandomPlayerDetails(), LotteryNumbers.createRandom());
110+
lotteryService.submitTicket(ticket);
111+
}
112+
}
113+
114+
private static PlayerDetails getRandomPlayerDetails() {
115+
Random random = new Random();
116+
int idx = random.nextInt(allPlayerDetails.size());
117+
return allPlayerDetails.get(idx);
40118
}
41119
}

hexagonal/src/main/java/com/iluwatar/hexagonal/administration/LotteryAdministrationImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,10 @@ public LotteryNumbers performLottery() {
7272
Map<LotteryTicketId, LotteryTicket> tickets = getAllSubmittedTickets();
7373
for (LotteryTicketId id: tickets.keySet()) {
7474
LotteryTicketCheckResult result = service.checkTicketForPrize(id, numbers);
75-
if (result.equals(CheckResult.WIN_PRIZE)) {
75+
if (result.getResult().equals(CheckResult.WIN_PRIZE)) {
7676
bank.transferFunds(WIN_AMOUNT, PRIZE_PAYER_BANK_ACCOUNT, tickets.get(id).getPlayerDetails().getBankAccount());
7777
notifications.notifyPrize(tickets.get(id).getPlayerDetails(), WIN_AMOUNT);
78-
} else if (result.equals(CheckResult.NO_PRIZE)) {
78+
} else if (result.getResult().equals(CheckResult.NO_PRIZE)) {
7979
notifications.notifyNoWin(tickets.get(id).getPlayerDetails());
8080
}
8181
}

hexagonal/src/main/java/com/iluwatar/hexagonal/notifications/LotteryNotificationsImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public void notifyNoWin(PlayerDetails details) {
4141
@Override
4242
public void notifyPrize(PlayerDetails details, int prizeAmount) {
4343
System.out
44-
.println(String.format("Lottery ticket for %s has won! Your bank account %s was deposited with %d credits.",
44+
.println(String.format("Lottery ticket for %s has won! The bank account %s was deposited with %d credits.",
4545
details.getEmail(), details.getBankAccount(), prizeAmount));
4646
}
4747
}

hexagonal/src/main/java/com/iluwatar/hexagonal/service/LotteryServiceImpl.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@
4343
*/
4444
public class LotteryServiceImpl implements LotteryService {
4545

46+
private static final String LOTTERY_SERVICE_BANK_ACCOUNT = "123-123";
47+
48+
private static final int TICKET_PRIZE = 3;
49+
4650
private final LotteryTicketRepository repository;
4751

4852
private final WireTransfers bank = new WireTransfersImpl();
@@ -55,7 +59,7 @@ public LotteryServiceImpl() {
5559

5660
@Override
5761
public Optional<LotteryTicketId> submitTicket(LotteryTicket ticket) {
58-
bank.transferFunds(3, ticket.getPlayerDetails().getBankAccount(), "123-123");
62+
bank.transferFunds(TICKET_PRIZE, ticket.getPlayerDetails().getBankAccount(), LOTTERY_SERVICE_BANK_ACCOUNT);
5963
Optional<LotteryTicketId> optional = repository.save(ticket);
6064
if (optional.isPresent()) {
6165
notifications.notifyTicketSubmitted(ticket.getPlayerDetails());

0 commit comments

Comments
 (0)