diff options
| author | Kostya <mail@sartin.in> | 2026-08-16 11:55:08 +0000 |
|---|---|---|
| committer | Kostya <mail@sartin.in> | 2026-08-16 11:55:08 +0000 |
| commit | 07a7a1cb3e4cfc1580bc05b0a6010a1e9f7e7508 (patch) | |
| tree | 3cf36ee5ba06de89602d923a32637820cc508d7a /api/src/main/java/market | |
| parent | 0247f3f5068b96df52a4f9424578d4c66ca6975c (diff) | |
| download | guess-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')
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 @@ | |||
| 1 | package market.guess.api; | ||
| 2 | |||
| 3 | import java.nio.file.Path; | ||
| 4 | import java.util.List; | ||
| 5 | |||
| 6 | public 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 @@ | |||
| 1 | package market.guess.api; | 1 | package market.guess.api; |
| 2 | 2 | ||
| 3 | public enum EventStatus { | 3 | public 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; | |||
| 3 | import java.util.List; | 3 | import java.util.List; |
| 4 | 4 | ||
| 5 | public record EventSummaryDTO( | 5 | public 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 @@ | |||
| 1 | package market.guess.api; | 1 | package market.guess.api; |
| 2 | 2 | ||
| 3 | import java.nio.file.Path; | 3 | import java.nio.file.Path; |
| 4 | import java.util.List; | ||
| 5 | import market.guess.exception.GuessMarketException; | ||
| 6 | 4 | ||
| 7 | public interface GuessMarketContext { | 5 | public 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 @@ | |||
| 1 | package market.guess.api; | ||
| 2 | |||
| 3 | public 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; | |||
| 5 | public record MarketStateDTO( | 5 | public 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 @@ | |||
| 1 | package market.guess.api; | ||
| 2 | |||
| 3 | public 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 @@ | |||
| 1 | package market.guess.api; | ||
| 2 | |||
| 3 | import java.time.Instant; | ||
| 4 | |||
| 5 | public 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 @@ | |||
| 1 | package market.guess.api; | 1 | package market.guess.api; |
| 2 | 2 | ||
| 3 | public record TradeRowDTO( | 3 | public record TradeRowDTO( |
| 4 | String at, String userName, String optionName, long quantity, String pricePaid) {} | 4 | String at, String userName, String optionName, String quantity, String pricePaid) {} |