diff options
| author | Kostya <mail@sartin.in> | 2026-08-16 18:50:15 +0000 |
|---|---|---|
| committer | Kostya <mail@sartin.in> | 2026-08-16 18:50:15 +0000 |
| commit | eed9265be711432f40247f149c07f9e33511192a (patch) | |
| tree | 19bef593ffeacc02c606c73291df637463be1a26 /api/src/main/java/market/guess | |
| parent | 07a7a1cb3e4cfc1580bc05b0a6010a1e9f7e7508 (diff) | |
| download | guess-market-eed9265be711432f40247f149c07f9e33511192a.tar.gz guess-market-eed9265be711432f40247f149c07f9e33511192a.tar.xz guess-market-eed9265be711432f40247f149c07f9e33511192a.zip | |
Split DTOs into api/model, extract order matching into service/matching
Moves Event/Ledger DTOs out of the flat api package into
api/model/{event,ledger}, and moves LocalCatalogContext and order
matching logic into dedicated service/catalog and service/matching
packages, replacing TradingOperation/TradingOperationImpl.
Diffstat (limited to 'api/src/main/java/market/guess')
11 files changed, 38 insertions, 40 deletions
diff --git a/api/src/main/java/market/guess/api/AccountDTO.java b/api/src/main/java/market/guess/api/AccountDTO.java index 8e7123e..134c88b 100644 --- a/api/src/main/java/market/guess/api/AccountDTO.java +++ b/api/src/main/java/market/guess/api/AccountDTO.java | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | package market.guess.api; | 1 | package market.guess.api; |
| 2 | 2 | ||
| 3 | import java.util.List; | 3 | import java.util.List; |
| 4 | import market.guess.model.ledger.LedgerEntryDTO; | ||
| 4 | 5 | ||
| 5 | public record AccountDTO( | 6 | public record AccountDTO( |
| 6 | String owner, String balance, boolean blocked, List<LedgerEntryDTO> entries) {} | 7 | String owner, String balance, boolean blocked, List<LedgerEntryDTO> entries) {} |
diff --git a/api/src/main/java/market/guess/api/CatalogContext.java b/api/src/main/java/market/guess/api/CatalogContext.java index 7e80042..c980ba8 100644 --- a/api/src/main/java/market/guess/api/CatalogContext.java +++ b/api/src/main/java/market/guess/api/CatalogContext.java | |||
| @@ -2,6 +2,8 @@ package market.guess.api; | |||
| 2 | 2 | ||
| 3 | import java.nio.file.Path; | 3 | import java.nio.file.Path; |
| 4 | import java.util.List; | 4 | import java.util.List; |
| 5 | import market.guess.model.event.EventDetailDTO; | ||
| 6 | import market.guess.model.event.EventSummaryDTO; | ||
| 5 | 7 | ||
| 6 | public interface CatalogContext { | 8 | public interface CatalogContext { |
| 7 | Result<LoadResultDTO> loadEvents(Path path); | 9 | Result<LoadResultDTO> loadEvents(Path path); |
| @@ -9,4 +11,8 @@ public interface CatalogContext { | |||
| 9 | Result<List<EventSummaryDTO>> getAllEvents(); | 11 | Result<List<EventSummaryDTO>> getAllEvents(); |
| 10 | 12 | ||
| 11 | Result<EventDetailDTO> getEvent(String eventKey); | 13 | Result<EventDetailDTO> getEvent(String eventKey); |
| 14 | |||
| 15 | Result<Void> saveState(Path path); | ||
| 16 | |||
| 17 | Result<LoadResultDTO> restoreState(Path path); | ||
| 12 | } | 18 | } |
diff --git a/api/src/main/java/market/guess/api/GuessMarketContext.java b/api/src/main/java/market/guess/api/GuessMarketContext.java index 4eee37e..7ec7323 100644 --- a/api/src/main/java/market/guess/api/GuessMarketContext.java +++ b/api/src/main/java/market/guess/api/GuessMarketContext.java | |||
| @@ -1,16 +1,10 @@ | |||
| 1 | package market.guess.api; | 1 | package market.guess.api; |
| 2 | 2 | ||
| 3 | import java.nio.file.Path; | 3 | import market.guess.model.event.EventDetailDTO; |
| 4 | 4 | ||
| 5 | public interface GuessMarketContext { | 5 | public interface GuessMarketContext { |
| 6 | Result<PurchaseReceiptDTO> buyShares( | 6 | Result<PurchaseReceiptDTO> buyShares( |
| 7 | String userName, String eventKey, String optionKey, int quantity); | 7 | String userName, String eventKey, String optionKey, int quantity); |
| 8 | 8 | ||
| 9 | Result<EventDetailDTO> closeEvent(String userName, String eventKey, String winningOptionKey); | 9 | Result<EventDetailDTO> settleEvent(String userName, String eventKey, String winningOptionKey); |
| 10 | |||
| 11 | Result<AccountDTO> account(String userName); | ||
| 12 | |||
| 13 | Result<Void> saveState(Path path); | ||
| 14 | |||
| 15 | Result<LoadResultDTO> restoreState(Path path); | ||
| 16 | } | 10 | } |
diff --git a/api/src/main/java/market/guess/api/LoadResultDTO.java b/api/src/main/java/market/guess/api/LoadResultDTO.java index 8cae3c0..95c23e7 100644 --- a/api/src/main/java/market/guess/api/LoadResultDTO.java +++ b/api/src/main/java/market/guess/api/LoadResultDTO.java | |||
| @@ -1,15 +1,3 @@ | |||
| 1 | package market.guess.api; | 1 | package market.guess.api; |
| 2 | 2 | ||
| 3 | import java.util.List; | 3 | public record LoadResultDTO(String source, int eventsLoaded) {} |
| 4 | |||
| 5 | public record LoadResultDTO( | ||
| 6 | boolean success, String source, int eventsLoaded, List<ProblemDTO> issues) { | ||
| 7 | |||
| 8 | public static LoadResultDTO success(String sourceLabel, int eventsLoaded) { | ||
| 9 | return new LoadResultDTO(true, sourceLabel, eventsLoaded, List.of()); | ||
| 10 | } | ||
| 11 | |||
| 12 | public static LoadResultDTO failure(String sourceLabel, List<ProblemDTO> problems) { | ||
| 13 | return new LoadResultDTO(false, sourceLabel, 0, List.copyOf(problems)); | ||
| 14 | } | ||
| 15 | } | ||
diff --git a/api/src/main/java/market/guess/api/PurchaseReceiptDTO.java b/api/src/main/java/market/guess/api/PurchaseReceiptDTO.java index bd5b2f7..e98a080 100644 --- a/api/src/main/java/market/guess/api/PurchaseReceiptDTO.java +++ b/api/src/main/java/market/guess/api/PurchaseReceiptDTO.java | |||
| @@ -1,10 +1,5 @@ | |||
| 1 | package market.guess.api; | 1 | package market.guess.api; |
| 2 | 2 | ||
| 3 | public record PurchaseReceiptDTO( | 3 | import java.util.List; |
| 4 | String eventKey, | 4 | |
| 5 | String optionName, | 5 | public record PurchaseReceiptDTO(List<TradeRowDTO> trades, MarketStateDTO stateAfter) {} |
| 6 | long quantity, | ||
| 7 | String sharesCost, | ||
| 8 | String commission, | ||
| 9 | String totalPaid, | ||
| 10 | MarketStateDTO stateAfter) {} | ||
diff --git a/api/src/main/java/market/guess/api/Result.java b/api/src/main/java/market/guess/api/Result.java index 15ac5db..ff66761 100644 --- a/api/src/main/java/market/guess/api/Result.java +++ b/api/src/main/java/market/guess/api/Result.java | |||
| @@ -5,30 +5,36 @@ import java.time.Instant; | |||
| 5 | public final class Result<T> { | 5 | public final class Result<T> { |
| 6 | private final boolean success; | 6 | private final boolean success; |
| 7 | private final String message; | 7 | private final String message; |
| 8 | private final String details; | ||
| 8 | private final T data; | 9 | private final T data; |
| 9 | private final Instant timeStamp; | 10 | private final Instant timeStamp; |
| 10 | 11 | ||
| 11 | private Result(boolean success, String message, T data) { | 12 | private Result(boolean success, String message, String details, T data) { |
| 12 | this.success = success; | 13 | this.success = success; |
| 13 | this.message = message; | 14 | this.message = message; |
| 14 | this.data = data; | 15 | this.data = data; |
| 16 | this.details = details; | ||
| 15 | this.timeStamp = Instant.now(); | 17 | this.timeStamp = Instant.now(); |
| 16 | } | 18 | } |
| 17 | 19 | ||
| 18 | public static <T> Result<T> ok() { | 20 | public static <T> Result<T> ok() { |
| 19 | return new Result<T>(true, "Operation successful", null); | 21 | return new Result<T>(true, "Operation successful", "", null); |
| 20 | } | 22 | } |
| 21 | 23 | ||
| 22 | public static <T> Result<T> ok(T data) { | 24 | public static <T> Result<T> ok(T data) { |
| 23 | return new Result<>(true, "Operation successful", data); | 25 | return new Result<>(true, "Operation successful", "", data); |
| 24 | } | 26 | } |
| 25 | 27 | ||
| 26 | public static <T> Result<T> error(String message, T data) { | 28 | public static <T> Result<T> error(String message, String details, T data) { |
| 27 | return new Result<>(false, message, data); | 29 | return new Result<>(false, message, details, data); |
| 30 | } | ||
| 31 | |||
| 32 | public static <T> Result<T> error(String message, String details) { | ||
| 33 | return error(message, details, null); | ||
| 28 | } | 34 | } |
| 29 | 35 | ||
| 30 | public static <T> Result<T> error(String message) { | 36 | public static <T> Result<T> error(String message) { |
| 31 | return new Result<>(false, message, null); | 37 | return error(message, null, null); |
| 32 | } | 38 | } |
| 33 | 39 | ||
| 34 | public boolean isSuccess() { | 40 | public boolean isSuccess() { |
| @@ -39,6 +45,10 @@ public final class Result<T> { | |||
| 39 | return message; | 45 | return message; |
| 40 | } | 46 | } |
| 41 | 47 | ||
| 48 | public String getDetails() { | ||
| 49 | return details; | ||
| 50 | } | ||
| 51 | |||
| 42 | public T getData() { | 52 | public T getData() { |
| 43 | return data; | 53 | return data; |
| 44 | } | 54 | } |
diff --git a/api/src/main/java/market/guess/api/EventDetailDTO.java b/api/src/main/java/market/guess/model/event/EventDetailDTO.java index 893f153..e45458b 100644 --- a/api/src/main/java/market/guess/api/EventDetailDTO.java +++ b/api/src/main/java/market/guess/model/event/EventDetailDTO.java | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | package market.guess.api; | 1 | package market.guess.model.event; |
| 2 | 2 | ||
| 3 | import java.util.List; | 3 | import java.util.List; |
| 4 | import market.guess.api.MarketStateDTO; | ||
| 5 | import market.guess.api.TradeRowDTO; | ||
| 4 | 6 | ||
| 5 | public record EventDetailDTO( | 7 | public record EventDetailDTO( |
| 6 | EventSummaryDTO summary, | 8 | EventSummaryDTO summary, |
diff --git a/api/src/main/java/market/guess/api/EventStatus.java b/api/src/main/java/market/guess/model/event/EventStatus.java index 6580157..c6460f9 100644 --- a/api/src/main/java/market/guess/api/EventStatus.java +++ b/api/src/main/java/market/guess/model/event/EventStatus.java | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | package market.guess.api; | 1 | package market.guess.model.event; |
| 2 | 2 | ||
| 3 | public enum EventStatus { | 3 | public enum EventStatus { |
| 4 | DRAFT, | 4 | DRAFT, |
diff --git a/api/src/main/java/market/guess/api/EventSummaryDTO.java b/api/src/main/java/market/guess/model/event/EventSummaryDTO.java index d185103..1595f81 100644 --- a/api/src/main/java/market/guess/api/EventSummaryDTO.java +++ b/api/src/main/java/market/guess/model/event/EventSummaryDTO.java | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | package market.guess.api; | 1 | package market.guess.model.event; |
| 2 | 2 | ||
| 3 | import java.util.List; | 3 | import java.util.List; |
| 4 | import market.guess.api.CommissionTiming; | ||
| 5 | import market.guess.api.MechanismType; | ||
| 4 | 6 | ||
| 5 | public record EventSummaryDTO( | 7 | public record EventSummaryDTO( |
| 6 | String key, | 8 | String key, |
diff --git a/api/src/main/java/market/guess/api/LedgerEntryDTO.java b/api/src/main/java/market/guess/model/ledger/LedgerEntryDTO.java index b8f994c..733ad03 100644 --- a/api/src/main/java/market/guess/api/LedgerEntryDTO.java +++ b/api/src/main/java/market/guess/model/ledger/LedgerEntryDTO.java | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | package market.guess.api; | 1 | package market.guess.model.ledger; |
| 2 | 2 | ||
| 3 | public record LedgerEntryDTO( | 3 | public record LedgerEntryDTO( |
| 4 | long seq, String at, LedgerType type, String amount, String balanceAfter, String note) {} | 4 | long seq, String at, LedgerType type, String amount, String balanceAfter, String note) {} |
diff --git a/api/src/main/java/market/guess/api/LedgerType.java b/api/src/main/java/market/guess/model/ledger/LedgerType.java index 3402b84..b1fe15b 100644 --- a/api/src/main/java/market/guess/api/LedgerType.java +++ b/api/src/main/java/market/guess/model/ledger/LedgerType.java | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | package market.guess.api; | 1 | package market.guess.model.ledger; |
| 2 | 2 | ||
| 3 | public enum LedgerType { | 3 | public enum LedgerType { |
| 4 | SUBSIDY, | 4 | SUBSIDY, |