aboutsummaryrefslogtreecommitdiffstats
path: root/service/src/main/java/market
diff options
context:
space:
mode:
Diffstat (limited to 'service/src/main/java/market')
-rw-r--r--service/src/main/java/market/guess/service/LocalGuessMarketContext.java28
-rw-r--r--service/src/main/java/market/guess/service/TradingOperation.java13
-rw-r--r--service/src/main/java/market/guess/service/TradingOperationImpl.java22
-rw-r--r--service/src/main/java/market/guess/service/domain/Event.java7
-rw-r--r--service/src/main/java/market/guess/service/domain/Settlement.java6
-rw-r--r--service/src/main/java/market/guess/service/infrastructure/provider/XMLLoader.java13
-rw-r--r--service/src/main/java/market/guess/service/repository/InMemoryEventRepository.java19
-rw-r--r--service/src/main/java/market/guess/service/repository/InMemoryUserRepository.java13
8 files changed, 116 insertions, 5 deletions
diff --git a/service/src/main/java/market/guess/service/LocalGuessMarketContext.java b/service/src/main/java/market/guess/service/LocalGuessMarketContext.java
index 67e263f..16ee1b8 100644
--- a/service/src/main/java/market/guess/service/LocalGuessMarketContext.java
+++ b/service/src/main/java/market/guess/service/LocalGuessMarketContext.java
@@ -10,19 +10,33 @@ import market.guess.api.LoadResultDTO;
10import market.guess.api.PurchaseReceiptDTO; 10import market.guess.api.PurchaseReceiptDTO;
11import market.guess.exception.GuessMarketException; 11import market.guess.exception.GuessMarketException;
12import market.guess.service.domain.Event; 12import market.guess.service.domain.Event;
13import market.guess.service.infrastructure.provider.Loader;
13import market.guess.service.repository.EventRepository; 14import market.guess.service.repository.EventRepository;
15import market.guess.service.repository.UserRepository;
14 16
15public final class LocalGuessMarketContext implements GuessMarketContext { 17public final class LocalGuessMarketContext implements GuessMarketContext {
16 private final EventRepository eventRepository; 18 private final EventRepository eventRepository;
19 private final UserRepository userRepository;
17 20
18 public LocalGuessMarketContext(EventRepository eventRepository) { 21 private final TradingOperation tradingOperation;
22
23 private final Loader provider;
24
25 public LocalGuessMarketContext(
26 Loader provider,
27 EventRepository eventRepository,
28 UserRepository userRepository,
29 TradingOperation tradingOperation) {
19 super(); 30 super();
31 this.provider = provider;
20 this.eventRepository = eventRepository; 32 this.eventRepository = eventRepository;
33 this.userRepository = userRepository;
34 this.tradingOperation = tradingOperation;
21 } 35 }
22 36
23 @Override 37 @Override
24 public LoadResultDTO loadEvents(Path path) { 38 public LoadResultDTO loadEvents(Path path) {
25 throw new UnsupportedOperationException("Unimplemented method 'loadEvents'"); 39 return provider.load(path);
26 } 40 }
27 41
28 @Override 42 @Override
@@ -42,15 +56,19 @@ public final class LocalGuessMarketContext implements GuessMarketContext {
42 56
43 @Override 57 @Override
44 public PurchaseReceiptDTO buyShares( 58 public PurchaseReceiptDTO buyShares(
45 String userName, String eventKey, String optionKey, long quantity) 59 String userName, String eventKey, String optionKey, int quantity)
46 throws GuessMarketException { 60 throws GuessMarketException {
47 throw new UnsupportedOperationException("Unimplemented method 'buyShares'"); 61 var event = eventRepository.getEvent(eventKey);
62 var option = event.getOption(optionKey);
63 var user = userRepository.getUser(userName);
64 var trade = tradingOperation.buy(event, user, option, quantity);
65 return new PurchaseReceiptDTO();
48 } 66 }
49 67
50 @Override 68 @Override
51 public EventDetailDTO closeEvent(String userName, String eventKey, String winningOptionKey) 69 public EventDetailDTO closeEvent(String userName, String eventKey, String winningOptionKey)
52 throws GuessMarketException { 70 throws GuessMarketException {
53 throw new UnsupportedOperationException("Unimplemented method 'closeEvent'"); 71 throw new UnsupportedOperationException("Unimplemented method 'account'");
54 } 72 }
55 73
56 @Override 74 @Override
diff --git a/service/src/main/java/market/guess/service/TradingOperation.java b/service/src/main/java/market/guess/service/TradingOperation.java
new file mode 100644
index 0000000..c8153c2
--- /dev/null
+++ b/service/src/main/java/market/guess/service/TradingOperation.java
@@ -0,0 +1,13 @@
1package market.guess.service;
2
3import market.guess.service.domain.Event;
4import market.guess.service.domain.Option;
5import market.guess.service.domain.Settlement;
6import market.guess.service.domain.Trade;
7import market.guess.service.domain.User;
8
9public interface TradingOperation {
10 Trade buy(Event event, User user, Option Option, int quantity);
11
12 Settlement settle(Event event, String winningOption);
13}
diff --git a/service/src/main/java/market/guess/service/TradingOperationImpl.java b/service/src/main/java/market/guess/service/TradingOperationImpl.java
new file mode 100644
index 0000000..f6c9aa1
--- /dev/null
+++ b/service/src/main/java/market/guess/service/TradingOperationImpl.java
@@ -0,0 +1,22 @@
1package market.guess.service;
2
3import market.guess.service.domain.Event;
4import market.guess.service.domain.Option;
5import market.guess.service.domain.Settlement;
6import market.guess.service.domain.Trade;
7import market.guess.service.domain.User;
8
9public final class TradingOperationImpl implements TradingOperation {
10
11 @Override
12 public Trade buy(Event event, User user, Option Option, int quantity) {
13 // TODO Auto-generated method stub
14 throw new UnsupportedOperationException("Unimplemented method 'buy'");
15 }
16
17 @Override
18 public Settlement settle(Event event, String winningOption) {
19 // TODO Auto-generated method stub
20 throw new UnsupportedOperationException("Unimplemented method 'settle'");
21 }
22}
diff --git a/service/src/main/java/market/guess/service/domain/Event.java b/service/src/main/java/market/guess/service/domain/Event.java
index 2d7ac39..cef0840 100644
--- a/service/src/main/java/market/guess/service/domain/Event.java
+++ b/service/src/main/java/market/guess/service/domain/Event.java
@@ -165,4 +165,11 @@ public final class Event {
165 getOptionsNames(), 165 getOptionsNames(),
166 account.getBalance().toPlainString()); 166 account.getBalance().toPlainString());
167 } 167 }
168
169 public Option getOption(String optionKey) {
170 return options.stream()
171 .filter(option -> option.getKey().equalsIgnoreCase(optionKey))
172 .findFirst()
173 .orElseThrow(() -> new IllegalArgumentException("No such option."));
174 }
168} 175}
diff --git a/service/src/main/java/market/guess/service/domain/Settlement.java b/service/src/main/java/market/guess/service/domain/Settlement.java
new file mode 100644
index 0000000..cfc61f5
--- /dev/null
+++ b/service/src/main/java/market/guess/service/domain/Settlement.java
@@ -0,0 +1,6 @@
1package market.guess.service.domain;
2
3import java.math.BigDecimal;
4
5public record Settlement(
6 String winningOption, BigDecimal commission, BigDecimal paidOutToHolders) {}
diff --git a/service/src/main/java/market/guess/service/infrastructure/provider/XMLLoader.java b/service/src/main/java/market/guess/service/infrastructure/provider/XMLLoader.java
new file mode 100644
index 0000000..443cd87
--- /dev/null
+++ b/service/src/main/java/market/guess/service/infrastructure/provider/XMLLoader.java
@@ -0,0 +1,13 @@
1package market.guess.service.infrastructure.provider;
2
3import java.nio.file.Path;
4import market.guess.api.LoadResultDTO;
5
6public final class XMLLoader implements Loader {
7
8 @Override
9 public LoadResultDTO load(Path path) {
10 // TODO Auto-generated method stub
11 throw new UnsupportedOperationException("Unimplemented method 'load'");
12 }
13}
diff --git a/service/src/main/java/market/guess/service/repository/InMemoryEventRepository.java b/service/src/main/java/market/guess/service/repository/InMemoryEventRepository.java
new file mode 100644
index 0000000..dad1055
--- /dev/null
+++ b/service/src/main/java/market/guess/service/repository/InMemoryEventRepository.java
@@ -0,0 +1,19 @@
1package market.guess.service.repository;
2
3import java.util.List;
4import market.guess.service.domain.Event;
5
6public final class InMemoryEventRepository implements EventRepository {
7
8 @Override
9 public Event getEvent(String id) {
10 // TODO Auto-generated method stub
11 throw new UnsupportedOperationException("Unimplemented method 'getEvent'");
12 }
13
14 @Override
15 public List<Event> getAllEvents() {
16 // TODO Auto-generated method stub
17 throw new UnsupportedOperationException("Unimplemented method 'getAllEvents'");
18 }
19}
diff --git a/service/src/main/java/market/guess/service/repository/InMemoryUserRepository.java b/service/src/main/java/market/guess/service/repository/InMemoryUserRepository.java
new file mode 100644
index 0000000..e71c94c
--- /dev/null
+++ b/service/src/main/java/market/guess/service/repository/InMemoryUserRepository.java
@@ -0,0 +1,13 @@
1package market.guess.service.repository;
2
3
4import market.guess.service.domain.User;
5
6public final class InMemoryUserRepository implements UserRepository {
7
8 @Override
9 public User getUser(String name) {
10 // TODO Auto-generated method stub
11 throw new UnsupportedOperationException("Unimplemented method 'getUser'");
12 }
13}