aboutsummaryrefslogtreecommitdiffstats
path: root/api/src/main/java/market/guess
diff options
context:
space:
mode:
authorKostya <mail@sartin.in>2026-08-16 11:55:08 +0000
committerKostya <mail@sartin.in>2026-08-16 11:55:08 +0000
commit07a7a1cb3e4cfc1580bc05b0a6010a1e9f7e7508 (patch)
tree3cf36ee5ba06de89602d923a32637820cc508d7a /api/src/main/java/market/guess
parent0247f3f5068b96df52a4f9424578d4c66ca6975c (diff)
downloadguess-market-07a7a1cb3e4cfc1580bc05b0a6010a1e9f7e7508.tar.gz
guess-market-07a7a1cb3e4cfc1580bc05b0a6010a1e9f7e7508.tar.xz
guess-market-07a7a1cb3e4cfc1580bc05b0a6010a1e9f7e7508.zip
Rename Option/Account to Market/Ledger, add Result-based error handling
Split GuessMarketContext into a separate CatalogContext for read-only event listing, wrap fallible operations in Result<T> instead of throwing, and wire load/save of events and users through a JSON Wrapper.
Diffstat (limited to 'api/src/main/java/market/guess')
-rw-r--r--api/src/main/java/market/guess/api/CatalogContext.java12
-rw-r--r--api/src/main/java/market/guess/api/EventStatus.java4
-rw-r--r--api/src/main/java/market/guess/api/EventSummaryDTO.java2
-rw-r--r--api/src/main/java/market/guess/api/GuessMarketContext.java23
-rw-r--r--api/src/main/java/market/guess/api/MarketDTO.java3
-rw-r--r--api/src/main/java/market/guess/api/MarketStateDTO.java2
-rw-r--r--api/src/main/java/market/guess/api/OptionStateDTO.java3
-rw-r--r--api/src/main/java/market/guess/api/Result.java49
-rw-r--r--api/src/main/java/market/guess/api/TradeRowDTO.java2
9 files changed, 75 insertions, 25 deletions
diff --git a/api/src/main/java/market/guess/api/CatalogContext.java b/api/src/main/java/market/guess/api/CatalogContext.java
new file mode 100644
index 0000000..7e80042
--- /dev/null
+++ b/api/src/main/java/market/guess/api/CatalogContext.java
@@ -0,0 +1,12 @@
1package market.guess.api;
2
3import java.nio.file.Path;
4import java.util.List;
5
6public interface CatalogContext {
7 Result<LoadResultDTO> loadEvents(Path path);
8
9 Result<List<EventSummaryDTO>> getAllEvents();
10
11 Result<EventDetailDTO> getEvent(String eventKey);
12}
diff --git a/api/src/main/java/market/guess/api/EventStatus.java b/api/src/main/java/market/guess/api/EventStatus.java
index acd7542..6580157 100644
--- a/api/src/main/java/market/guess/api/EventStatus.java
+++ b/api/src/main/java/market/guess/api/EventStatus.java
@@ -1,7 +1,7 @@
1package market.guess.api; 1package market.guess.api;
2 2
3public enum EventStatus { 3public enum EventStatus {
4 NOT_STARTED, 4 DRAFT,
5 ACTIVE, 5 ACTIVE,
6 CLOSED 6 SETTLED
7} 7}
diff --git a/api/src/main/java/market/guess/api/EventSummaryDTO.java b/api/src/main/java/market/guess/api/EventSummaryDTO.java
index 361656b..d185103 100644
--- a/api/src/main/java/market/guess/api/EventSummaryDTO.java
+++ b/api/src/main/java/market/guess/api/EventSummaryDTO.java
@@ -3,7 +3,7 @@ package market.guess.api;
3import java.util.List; 3import java.util.List;
4 4
5public record EventSummaryDTO( 5public record EventSummaryDTO(
6 String eventKey, 6 String key,
7 int displayId, 7 int displayId,
8 String name, 8 String name,
9 String description, 9 String description,
diff --git a/api/src/main/java/market/guess/api/GuessMarketContext.java b/api/src/main/java/market/guess/api/GuessMarketContext.java
index d959de6..4eee37e 100644
--- a/api/src/main/java/market/guess/api/GuessMarketContext.java
+++ b/api/src/main/java/market/guess/api/GuessMarketContext.java
@@ -1,27 +1,16 @@
1package market.guess.api; 1package market.guess.api;
2 2
3import java.nio.file.Path; 3import java.nio.file.Path;
4import java.util.List;
5import market.guess.exception.GuessMarketException;
6 4
7public interface GuessMarketContext { 5public interface GuessMarketContext {
8 LoadResultDTO loadEvents(Path path); 6 Result<PurchaseReceiptDTO> buyShares(
7 String userName, String eventKey, String optionKey, int quantity);
9 8
10 List<EventSummaryDTO> listEvents(); 9 Result<EventDetailDTO> closeEvent(String userName, String eventKey, String winningOptionKey);
11 10
12 boolean isLoaded(); 11 Result<AccountDTO> account(String userName);
13 12
14 EventDetailDTO getEvent(String eventKey); 13 Result<Void> saveState(Path path);
15 14
16 PurchaseReceiptDTO buyShares(String userName, String eventKey, String optionKey, int quantity) 15 Result<LoadResultDTO> restoreState(Path path);
17 throws GuessMarketException;
18
19 EventDetailDTO closeEvent(String userName, String eventKey, String winningOptionKey)
20 throws GuessMarketException;
21
22 AccountDTO account(String userName);
23
24 void saveState(Path path) throws GuessMarketException;
25
26 LoadResultDTO restoreState(Path path);
27} 16}
diff --git a/api/src/main/java/market/guess/api/MarketDTO.java b/api/src/main/java/market/guess/api/MarketDTO.java
new file mode 100644
index 0000000..b7c48a2
--- /dev/null
+++ b/api/src/main/java/market/guess/api/MarketDTO.java
@@ -0,0 +1,3 @@
1package market.guess.api;
2
3public record MarketDTO(String key, String name, String price, String volume) {}
diff --git a/api/src/main/java/market/guess/api/MarketStateDTO.java b/api/src/main/java/market/guess/api/MarketStateDTO.java
index f49b2aa..1f7e79b 100644
--- a/api/src/main/java/market/guess/api/MarketStateDTO.java
+++ b/api/src/main/java/market/guess/api/MarketStateDTO.java
@@ -5,6 +5,6 @@ import java.util.List;
5public record MarketStateDTO( 5public record MarketStateDTO(
6 String eventKey, 6 String eventKey,
7 MechanismType mechanism, 7 MechanismType mechanism,
8 List<OptionStateDTO> options, 8 List<MarketDTO> markets,
9 String accountBalance, 9 String accountBalance,
10 String commissionCollected) {} 10 String commissionCollected) {}
diff --git a/api/src/main/java/market/guess/api/OptionStateDTO.java b/api/src/main/java/market/guess/api/OptionStateDTO.java
deleted file mode 100644
index c002fdd..0000000
--- a/api/src/main/java/market/guess/api/OptionStateDTO.java
+++ /dev/null
@@ -1,3 +0,0 @@
1package market.guess.api;
2
3public record OptionStateDTO(String optionKey, String name, String price, long sharesOutstanding) {}
diff --git a/api/src/main/java/market/guess/api/Result.java b/api/src/main/java/market/guess/api/Result.java
new file mode 100644
index 0000000..15ac5db
--- /dev/null
+++ b/api/src/main/java/market/guess/api/Result.java
@@ -0,0 +1,49 @@
1package market.guess.api;
2
3import java.time.Instant;
4
5public final class Result<T> {
6 private final boolean success;
7 private final String message;
8 private final T data;
9 private final Instant timeStamp;
10
11 private Result(boolean success, String message, T data) {
12 this.success = success;
13 this.message = message;
14 this.data = data;
15 this.timeStamp = Instant.now();
16 }
17
18 public static <T> Result<T> ok() {
19 return new Result<T>(true, "Operation successful", null);
20 }
21
22 public static <T> Result<T> ok(T data) {
23 return new Result<>(true, "Operation successful", data);
24 }
25
26 public static <T> Result<T> error(String message, T data) {
27 return new Result<>(false, message, data);
28 }
29
30 public static <T> Result<T> error(String message) {
31 return new Result<>(false, message, null);
32 }
33
34 public boolean isSuccess() {
35 return success;
36 }
37
38 public String getMessage() {
39 return message;
40 }
41
42 public T getData() {
43 return data;
44 }
45
46 public Instant getTimestamp() {
47 return timeStamp;
48 }
49}
diff --git a/api/src/main/java/market/guess/api/TradeRowDTO.java b/api/src/main/java/market/guess/api/TradeRowDTO.java
index 7331bb1..68d159a 100644
--- a/api/src/main/java/market/guess/api/TradeRowDTO.java
+++ b/api/src/main/java/market/guess/api/TradeRowDTO.java
@@ -1,4 +1,4 @@
1package market.guess.api; 1package market.guess.api;
2 2
3public record TradeRowDTO( 3public record TradeRowDTO(
4 String at, String userName, String optionName, long quantity, String pricePaid) {} 4 String at, String userName, String optionName, String quantity, String pricePaid) {}