Skip to content

Commit ae07423

Browse files
committed
First proposal
1 parent c7f9266 commit ae07423

File tree

3 files changed

+122
-83
lines changed

3 files changed

+122
-83
lines changed

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

Lines changed: 6 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,12 @@
2525
import com.google.inject.Guice;
2626
import com.google.inject.Injector;
2727
import com.iluwatar.hexagonal.banking.WireTransfers;
28-
import com.iluwatar.hexagonal.domain.LotteryNumbers;
29-
import com.iluwatar.hexagonal.domain.LotteryService;
30-
import com.iluwatar.hexagonal.domain.LotteryTicket;
31-
import com.iluwatar.hexagonal.domain.LotteryTicketCheckResult;
32-
import com.iluwatar.hexagonal.domain.LotteryTicketId;
33-
import com.iluwatar.hexagonal.domain.PlayerDetails;
3428
import com.iluwatar.hexagonal.module.LotteryModule;
3529
import com.iluwatar.hexagonal.mongo.MongoConnectionPropertiesLoader;
3630
import org.slf4j.Logger;
3731
import org.slf4j.LoggerFactory;
3832

39-
import java.util.HashSet;
40-
import java.util.Optional;
4133
import java.util.Scanner;
42-
import java.util.Set;
4334

4435
/**
4536
* Console interface for lottery players
@@ -54,21 +45,22 @@ public class ConsoleLottery {
5445
public static void main(String[] args) {
5546
MongoConnectionPropertiesLoader.load();
5647
Injector injector = Guice.createInjector(new LotteryModule());
57-
LotteryService service = injector.getInstance(LotteryService.class);
48+
com.iluwatar.hexagonal.domain.LotteryService service = injector.getInstance( com.iluwatar.hexagonal.domain.LotteryService.class);
5849
WireTransfers bank = injector.getInstance(WireTransfers.class);
5950
try (final Scanner scanner = new Scanner(System.in)) {
6051
boolean exit = false;
6152
while (!exit) {
6253
printMainMenu();
6354
String cmd = readString(scanner);
55+
LotteryService lotteryService = new LotteryServiceImpl(LOGGER);
6456
if ("1".equals(cmd)) {
65-
queryLotteryAccountFunds(bank, scanner);
57+
lotteryService.queryLotteryAccountFunds(bank, scanner);
6658
} else if ("2".equals(cmd)) {
67-
addFundsToLotteryAccount(bank, scanner);
59+
lotteryService.addFundsToLotteryAccount(bank, scanner);
6860
} else if ("3".equals(cmd)) {
69-
submitTicket(service, scanner);
61+
lotteryService.submitTicket(service, scanner);
7062
} else if ("4".equals(cmd)) {
71-
checkTicket(service, scanner);
63+
lotteryService.checkTicket(service, scanner);
7264
} else if ("5".equals(cmd)) {
7365
exit = true;
7466
} else {
@@ -78,75 +70,6 @@ public static void main(String[] args) {
7870
}
7971
}
8072

81-
private static void checkTicket(LotteryService service, Scanner scanner) {
82-
LOGGER.info("What is the ID of the lottery ticket?");
83-
String id = readString(scanner);
84-
LOGGER.info("Give the 4 comma separated winning numbers?");
85-
String numbers = readString(scanner);
86-
try {
87-
String[] parts = numbers.split(",");
88-
Set<Integer> winningNumbers = new HashSet<>();
89-
for (int i = 0; i < 4; i++) {
90-
winningNumbers.add(Integer.parseInt(parts[i]));
91-
}
92-
LotteryTicketCheckResult result = service.checkTicketForPrize(
93-
new LotteryTicketId(Integer.parseInt(id)), LotteryNumbers.create(winningNumbers));
94-
if (result.getResult().equals(LotteryTicketCheckResult.CheckResult.WIN_PRIZE)) {
95-
LOGGER.info("Congratulations! The lottery ticket has won!");
96-
} else if (result.getResult().equals(LotteryTicketCheckResult.CheckResult.NO_PRIZE)) {
97-
LOGGER.info("Unfortunately the lottery ticket did not win.");
98-
} else {
99-
LOGGER.info("Such lottery ticket has not been submitted.");
100-
}
101-
} catch (Exception e) {
102-
LOGGER.info("Failed checking the lottery ticket - please try again.");
103-
}
104-
}
105-
106-
private static void submitTicket(LotteryService service, Scanner scanner) {
107-
LOGGER.info("What is your email address?");
108-
String email = readString(scanner);
109-
LOGGER.info("What is your bank account number?");
110-
String account = readString(scanner);
111-
LOGGER.info("What is your phone number?");
112-
String phone = readString(scanner);
113-
PlayerDetails details = new PlayerDetails(email, account, phone);
114-
LOGGER.info("Give 4 comma separated lottery numbers?");
115-
String numbers = readString(scanner);
116-
try {
117-
String[] parts = numbers.split(",");
118-
Set<Integer> chosen = new HashSet<>();
119-
for (int i = 0; i < 4; i++) {
120-
chosen.add(Integer.parseInt(parts[i]));
121-
}
122-
LotteryNumbers lotteryNumbers = LotteryNumbers.create(chosen);
123-
LotteryTicket lotteryTicket = new LotteryTicket(new LotteryTicketId(), details, lotteryNumbers);
124-
Optional<LotteryTicketId> id = service.submitTicket(lotteryTicket);
125-
if (id.isPresent()) {
126-
LOGGER.info("Submitted lottery ticket with id: {}", id.get());
127-
} else {
128-
LOGGER.info("Failed submitting lottery ticket - please try again.");
129-
}
130-
} catch (Exception e) {
131-
LOGGER.info("Failed submitting lottery ticket - please try again.");
132-
}
133-
}
134-
135-
private static void addFundsToLotteryAccount(WireTransfers bank, Scanner scanner) {
136-
LOGGER.info("What is the account number?");
137-
String account = readString(scanner);
138-
LOGGER.info("How many credits do you want to deposit?");
139-
String amount = readString(scanner);
140-
bank.setFunds(account, Integer.parseInt(amount));
141-
LOGGER.info("The account {} now has {} credits.", account, bank.getFunds(account));
142-
}
143-
144-
private static void queryLotteryAccountFunds(WireTransfers bank, Scanner scanner) {
145-
LOGGER.info("What is the account number?");
146-
String account = readString(scanner);
147-
LOGGER.info("The account {} has {} credits.", account, bank.getFunds(account));
148-
}
149-
15073
private static void printMainMenu() {
15174
LOGGER.info("");
15275
LOGGER.info("### Lottery Service Console ###");
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.iluwatar.hexagonal.service;
2+
3+
import com.iluwatar.hexagonal.banking.WireTransfers;
4+
5+
import java.util.Scanner;
6+
7+
public interface LotteryService {
8+
void checkTicket(com.iluwatar.hexagonal.domain.LotteryService service, Scanner scanner);
9+
10+
void submitTicket(com.iluwatar.hexagonal.domain.LotteryService service, Scanner scanner);
11+
12+
void addFundsToLotteryAccount(WireTransfers bank, Scanner scanner);
13+
14+
15+
void queryLotteryAccountFunds(WireTransfers bank, Scanner scanner);
16+
17+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package com.iluwatar.hexagonal.service;
2+
3+
import com.iluwatar.hexagonal.banking.WireTransfers;
4+
import com.iluwatar.hexagonal.domain.*;
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
7+
8+
import java.util.HashSet;
9+
import java.util.Optional;
10+
import java.util.Scanner;
11+
import java.util.Set;
12+
13+
public class LotteryServiceImpl implements LotteryService {
14+
15+
private final Logger logger;
16+
17+
public LotteryServiceImpl(Logger logger) {
18+
19+
this.logger = logger;
20+
}
21+
22+
@Override
23+
public void checkTicket(com.iluwatar.hexagonal.domain.LotteryService service, Scanner scanner) {
24+
logger.info("What is the ID of the lottery ticket?");
25+
String id = readString(scanner);
26+
logger.info("Give the 4 comma separated winning numbers?");
27+
String numbers = readString(scanner);
28+
try {
29+
String[] parts = numbers.split(",");
30+
Set<Integer> winningNumbers = new HashSet<>();
31+
for (int i = 0; i < 4; i++) {
32+
winningNumbers.add(Integer.parseInt(parts[i]));
33+
}
34+
LotteryTicketCheckResult result = service.checkTicketForPrize(
35+
new LotteryTicketId(Integer.parseInt(id)), LotteryNumbers.create(winningNumbers));
36+
if (result.getResult().equals(LotteryTicketCheckResult.CheckResult.WIN_PRIZE)) {
37+
logger.info("Congratulations! The lottery ticket has won!");
38+
} else if (result.getResult().equals(LotteryTicketCheckResult.CheckResult.NO_PRIZE)) {
39+
logger.info("Unfortunately the lottery ticket did not win.");
40+
} else {
41+
logger.info("Such lottery ticket has not been submitted.");
42+
}
43+
} catch (Exception e) {
44+
logger.info("Failed checking the lottery ticket - please try again.");
45+
}
46+
}
47+
48+
@Override
49+
public void submitTicket(com.iluwatar.hexagonal.domain.LotteryService service, Scanner scanner) {
50+
logger.info("What is your email address?");
51+
String email = readString(scanner);
52+
logger.info("What is your bank account number?");
53+
String account = readString(scanner);
54+
logger.info("What is your phone number?");
55+
String phone = readString(scanner);
56+
PlayerDetails details = new PlayerDetails(email, account, phone);
57+
logger.info("Give 4 comma separated lottery numbers?");
58+
String numbers = readString(scanner);
59+
try {
60+
String[] parts = numbers.split(",");
61+
Set<Integer> chosen = new HashSet<>();
62+
for (int i = 0; i < 4; i++) {
63+
chosen.add(Integer.parseInt(parts[i]));
64+
}
65+
LotteryNumbers lotteryNumbers = LotteryNumbers.create(chosen);
66+
LotteryTicket lotteryTicket = new LotteryTicket(new LotteryTicketId(), details, lotteryNumbers);
67+
Optional<LotteryTicketId> id = service.submitTicket(lotteryTicket);
68+
if (id.isPresent()) {
69+
logger.info("Submitted lottery ticket with id: {}", id.get());
70+
} else {
71+
logger.info("Failed submitting lottery ticket - please try again.");
72+
}
73+
} catch (Exception e) {
74+
logger.info("Failed submitting lottery ticket - please try again.");
75+
}
76+
}
77+
78+
@Override
79+
public void addFundsToLotteryAccount(WireTransfers bank, Scanner scanner) {
80+
logger.info("What is the account number?");
81+
String account = readString(scanner);
82+
logger.info("How many credits do you want to deposit?");
83+
String amount = readString(scanner);
84+
bank.setFunds(account, Integer.parseInt(amount));
85+
logger.info("The account {} now has {} credits.", account, bank.getFunds(account));
86+
}
87+
88+
@Override
89+
public void queryLotteryAccountFunds(WireTransfers bank, Scanner scanner) {
90+
logger.info("What is the account number?");
91+
String account = readString(scanner);
92+
logger.info("The account {} has {} credits.", account, bank.getFunds(account));
93+
}
94+
95+
private String readString(Scanner scanner) {
96+
System.out.print("> ");
97+
return scanner.next();
98+
}
99+
}

0 commit comments

Comments
 (0)