From 07a7a1cb3e4cfc1580bc05b0a6010a1e9f7e7508 Mon Sep 17 00:00:00 2001 From: Kostya Date: Sun, 16 Aug 2026 11:55:08 +0000 Subject: 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 instead of throwing, and wire load/save of events and users through a JSON Wrapper. --- .../main/java/market/guess/api/CatalogContext.java | 12 ++++++ .../main/java/market/guess/api/EventStatus.java | 4 +- .../java/market/guess/api/EventSummaryDTO.java | 2 +- .../java/market/guess/api/GuessMarketContext.java | 23 +++------- api/src/main/java/market/guess/api/MarketDTO.java | 3 ++ .../main/java/market/guess/api/MarketStateDTO.java | 2 +- .../main/java/market/guess/api/OptionStateDTO.java | 3 -- api/src/main/java/market/guess/api/Result.java | 49 ++++++++++++++++++++++ .../main/java/market/guess/api/TradeRowDTO.java | 2 +- 9 files changed, 75 insertions(+), 25 deletions(-) create mode 100644 api/src/main/java/market/guess/api/CatalogContext.java create mode 100644 api/src/main/java/market/guess/api/MarketDTO.java delete mode 100644 api/src/main/java/market/guess/api/OptionStateDTO.java create mode 100644 api/src/main/java/market/guess/api/Result.java (limited to 'api/src/main/java/market/guess') 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 @@ +package market.guess.api; + +import java.nio.file.Path; +import java.util.List; + +public interface CatalogContext { + Result loadEvents(Path path); + + Result> getAllEvents(); + + Result getEvent(String eventKey); +} 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 @@ package market.guess.api; public enum EventStatus { - NOT_STARTED, + DRAFT, ACTIVE, - CLOSED + SETTLED } 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; import java.util.List; public record EventSummaryDTO( - String eventKey, + String key, int displayId, String name, 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 @@ package market.guess.api; import java.nio.file.Path; -import java.util.List; -import market.guess.exception.GuessMarketException; public interface GuessMarketContext { - LoadResultDTO loadEvents(Path path); + Result buyShares( + String userName, String eventKey, String optionKey, int quantity); - List listEvents(); + Result closeEvent(String userName, String eventKey, String winningOptionKey); - boolean isLoaded(); + Result account(String userName); - EventDetailDTO getEvent(String eventKey); + Result saveState(Path path); - PurchaseReceiptDTO buyShares(String userName, String eventKey, String optionKey, int quantity) - throws GuessMarketException; - - EventDetailDTO closeEvent(String userName, String eventKey, String winningOptionKey) - throws GuessMarketException; - - AccountDTO account(String userName); - - void saveState(Path path) throws GuessMarketException; - - LoadResultDTO restoreState(Path path); + Result restoreState(Path path); } 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 @@ +package market.guess.api; + +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; public record MarketStateDTO( String eventKey, MechanismType mechanism, - List options, + List markets, String accountBalance, 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 @@ -package market.guess.api; - -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 @@ +package market.guess.api; + +import java.time.Instant; + +public final class Result { + private final boolean success; + private final String message; + private final T data; + private final Instant timeStamp; + + private Result(boolean success, String message, T data) { + this.success = success; + this.message = message; + this.data = data; + this.timeStamp = Instant.now(); + } + + public static Result ok() { + return new Result(true, "Operation successful", null); + } + + public static Result ok(T data) { + return new Result<>(true, "Operation successful", data); + } + + public static Result error(String message, T data) { + return new Result<>(false, message, data); + } + + public static Result error(String message) { + return new Result<>(false, message, null); + } + + public boolean isSuccess() { + return success; + } + + public String getMessage() { + return message; + } + + public T getData() { + return data; + } + + public Instant getTimestamp() { + return timeStamp; + } +} 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 @@ package market.guess.api; public record TradeRowDTO( - String at, String userName, String optionName, long quantity, String pricePaid) {} + String at, String userName, String optionName, String quantity, String pricePaid) {} -- cgit v1.2.3