diff options
| author | Kostya <mail@sartin.in> | 2026-09-06 12:22:58 +0300 |
|---|---|---|
| committer | Kostya <mail@sartin.in> | 2026-09-06 12:22:58 +0300 |
| commit | 5bc7c4ed9d052668af66d3116a6b7afbe62c6eec (patch) | |
| tree | 5a59cf98d0a01f93ef60d3b356c389445089c952 /api/src/main/java | |
| parent | 508898f52c16cc737bc7d08b8ee4c29fab8d1146 (diff) | |
| download | guess-market-5bc7c4ed9d052668af66d3116a6b7afbe62c6eec.tar.gz guess-market-5bc7c4ed9d052668af66d3116a6b7afbe62c6eec.tar.xz guess-market-5bc7c4ed9d052668af66d3116a6b7afbe62c6eec.zip | |
api: extend contexts and DTOs for order books and event creation
The desktop UI needs to create events, trade on both sides of an order
book, and show who is participating in an event, none of which the api
module could express so far.
Add AccountContext for looking up ledger accounts by owner, and give
CatalogContext an openEvent operation plus createEvent, taking either a
CreateEventRequest or its fields spelled out. createEvent defaults to
a "Not implemented" error so existing implementations keep compiling
until they support it.
Let GuessMarketContext.placeOrder take an explicit side, keeping the
old signature as a default method that places a BUY so current callers
are unaffected.
Add OrderBookDTO and BookOrderDTO to describe per-option books with
best bid, best ask and spread, and ParticipantDTO for a user's
position, fees and P&L in an event. Carry the order books and
participants on EventDetailDTO and the market maker's name on
EventSummaryDTO.
Diffstat (limited to 'api/src/main/java')
9 files changed, 100 insertions, 3 deletions
diff --git a/api/src/main/java/market/guess/api/AccountContext.java b/api/src/main/java/market/guess/api/AccountContext.java new file mode 100644 index 0000000..8d880aa --- /dev/null +++ b/api/src/main/java/market/guess/api/AccountContext.java | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | package market.guess.api; | ||
| 2 | |||
| 3 | import java.util.List; | ||
| 4 | import market.guess.model.ledger.LedgerDTO; | ||
| 5 | |||
| 6 | public interface AccountContext { | ||
| 7 | Result<List<LedgerDTO>> getAllAccounts(); | ||
| 8 | |||
| 9 | Result<LedgerDTO> getAccount(String owner); | ||
| 10 | } | ||
diff --git a/api/src/main/java/market/guess/api/CatalogContext.java b/api/src/main/java/market/guess/api/CatalogContext.java index 413a81c..ca75409 100644 --- a/api/src/main/java/market/guess/api/CatalogContext.java +++ b/api/src/main/java/market/guess/api/CatalogContext.java | |||
| @@ -2,8 +2,11 @@ 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.CommissionTiming; | ||
| 6 | import market.guess.model.event.CreateEventRequest; | ||
| 5 | import market.guess.model.event.EventDetailDTO; | 7 | import market.guess.model.event.EventDetailDTO; |
| 6 | import market.guess.model.event.EventSummaryDTO; | 8 | import market.guess.model.event.EventSummaryDTO; |
| 9 | import market.guess.model.event.MechanismType; | ||
| 7 | 10 | ||
| 8 | public interface CatalogContext { | 11 | public interface CatalogContext { |
| 9 | Result<LoadResult> loadEvents(Path path); | 12 | Result<LoadResult> loadEvents(Path path); |
| @@ -15,4 +18,29 @@ public interface CatalogContext { | |||
| 15 | Result<Void> saveState(Path path); | 18 | Result<Void> saveState(Path path); |
| 16 | 19 | ||
| 17 | Result<LoadResult> restoreState(Path path); | 20 | Result<LoadResult> restoreState(Path path); |
| 21 | |||
| 22 | default Result<EventDetailDTO> createEvent(CreateEventRequest request) { | ||
| 23 | if (request == null) { | ||
| 24 | return Result.error("Request cannot be null"); | ||
| 25 | } | ||
| 26 | return createEvent( | ||
| 27 | request.name(), | ||
| 28 | request.description(), | ||
| 29 | request.mechanism(), | ||
| 30 | request.commissionPercent(), | ||
| 31 | request.commissionTiming(), | ||
| 32 | request.mmUserName()); | ||
| 33 | } | ||
| 34 | |||
| 35 | default Result<EventDetailDTO> createEvent( | ||
| 36 | String name, | ||
| 37 | String description, | ||
| 38 | MechanismType mechanism, | ||
| 39 | int commissionPercent, | ||
| 40 | CommissionTiming commissionTiming, | ||
| 41 | String mmUserName) { | ||
| 42 | return Result.error("Not implemented"); | ||
| 43 | } | ||
| 44 | |||
| 45 | Result<EventDetailDTO> openEvent(String eventKey); | ||
| 18 | } | 46 | } |
diff --git a/api/src/main/java/market/guess/api/GuessMarketContext.java b/api/src/main/java/market/guess/api/GuessMarketContext.java index 4edb437..0182ac3 100644 --- a/api/src/main/java/market/guess/api/GuessMarketContext.java +++ b/api/src/main/java/market/guess/api/GuessMarketContext.java | |||
| @@ -5,8 +5,18 @@ import market.guess.model.event.EventDetailDTO; | |||
| 5 | import market.guess.model.market.PurchaseReceiptDTO; | 5 | import market.guess.model.market.PurchaseReceiptDTO; |
| 6 | 6 | ||
| 7 | public interface GuessMarketContext { | 7 | public interface GuessMarketContext { |
| 8 | default Result<PurchaseReceiptDTO> placeOrder( | ||
| 9 | String userName, String eventKey, String optionKey, BigDecimal price, long quantity) { | ||
| 10 | return placeOrder(userName, eventKey, optionKey, "BUY", price, quantity); | ||
| 11 | } | ||
| 12 | |||
| 8 | Result<PurchaseReceiptDTO> placeOrder( | 13 | Result<PurchaseReceiptDTO> placeOrder( |
| 9 | String userName, String eventKey, String optionKey, BigDecimal price, long quantity); | 14 | String userName, |
| 15 | String eventKey, | ||
| 16 | String optionKey, | ||
| 17 | String side, | ||
| 18 | BigDecimal price, | ||
| 19 | long quantity); | ||
| 10 | 20 | ||
| 11 | Result<EventDetailDTO> settleEvent(String userName, String eventKey, String winningOptionKey); | 21 | Result<EventDetailDTO> settleEvent(String userName, String eventKey, String winningOptionKey); |
| 12 | } | 22 | } |
diff --git a/api/src/main/java/market/guess/model/event/CreateEventRequest.java b/api/src/main/java/market/guess/model/event/CreateEventRequest.java new file mode 100644 index 0000000..bac4cad --- /dev/null +++ b/api/src/main/java/market/guess/model/event/CreateEventRequest.java | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | package market.guess.model.event; | ||
| 2 | |||
| 3 | import java.math.BigDecimal; | ||
| 4 | import java.util.List; | ||
| 5 | |||
| 6 | public record CreateEventRequest( | ||
| 7 | String name, | ||
| 8 | String description, | ||
| 9 | MechanismType mechanism, | ||
| 10 | int commissionPercent, | ||
| 11 | CommissionTiming commissionTiming, | ||
| 12 | String mmUserName, | ||
| 13 | Integer liquidityB, | ||
| 14 | BigDecimal baseValueD, | ||
| 15 | List<String> options, | ||
| 16 | boolean allowMinting) {} | ||
diff --git a/api/src/main/java/market/guess/model/event/EventDetailDTO.java b/api/src/main/java/market/guess/model/event/EventDetailDTO.java index f5c4edf..1d2e415 100644 --- a/api/src/main/java/market/guess/model/event/EventDetailDTO.java +++ b/api/src/main/java/market/guess/model/event/EventDetailDTO.java | |||
| @@ -2,10 +2,13 @@ package market.guess.model.event; | |||
| 2 | 2 | ||
| 3 | import java.util.List; | 3 | import java.util.List; |
| 4 | import market.guess.model.market.MarketStateDTO; | 4 | import market.guess.model.market.MarketStateDTO; |
| 5 | import market.guess.model.market.OrderBookDTO; | ||
| 5 | import market.guess.model.market.TradeRowDTO; | 6 | import market.guess.model.market.TradeRowDTO; |
| 6 | 7 | ||
| 7 | public record EventDetailDTO( | 8 | public record EventDetailDTO( |
| 8 | EventSummaryDTO summary, | 9 | EventSummaryDTO summary, |
| 9 | MarketStateDTO state, | 10 | MarketStateDTO state, |
| 10 | List<TradeRowDTO> history, | 11 | List<TradeRowDTO> history, |
| 11 | String settledMarket) {} | 12 | String settledMarket, |
| 13 | List<OrderBookDTO> orderBooks, | ||
| 14 | List<ParticipantDTO> participants) {} | ||
diff --git a/api/src/main/java/market/guess/model/event/EventSummaryDTO.java b/api/src/main/java/market/guess/model/event/EventSummaryDTO.java index 42762c2..d62b7b3 100644 --- a/api/src/main/java/market/guess/model/event/EventSummaryDTO.java +++ b/api/src/main/java/market/guess/model/event/EventSummaryDTO.java | |||
| @@ -12,4 +12,5 @@ public record EventSummaryDTO( | |||
| 12 | MechanismType mechanism, | 12 | MechanismType mechanism, |
| 13 | EventStatus status, | 13 | EventStatus status, |
| 14 | List<String> optionNames, | 14 | List<String> optionNames, |
| 15 | String accountBalance) {} | 15 | String accountBalance, |
| 16 | String marketMaker) {} | ||
diff --git a/api/src/main/java/market/guess/model/event/ParticipantDTO.java b/api/src/main/java/market/guess/model/event/ParticipantDTO.java new file mode 100644 index 0000000..3b15c89 --- /dev/null +++ b/api/src/main/java/market/guess/model/event/ParticipantDTO.java | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | package market.guess.model.event; | ||
| 2 | |||
| 3 | public record ParticipantDTO( | ||
| 4 | String user, | ||
| 5 | String tag, | ||
| 6 | int yes, | ||
| 7 | int no, | ||
| 8 | String value, | ||
| 9 | String fees, | ||
| 10 | String pnl) {} | ||
diff --git a/api/src/main/java/market/guess/model/market/BookOrderDTO.java b/api/src/main/java/market/guess/model/market/BookOrderDTO.java new file mode 100644 index 0000000..9656f44 --- /dev/null +++ b/api/src/main/java/market/guess/model/market/BookOrderDTO.java | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | package market.guess.model.market; | ||
| 2 | |||
| 3 | public record BookOrderDTO( | ||
| 4 | String side, | ||
| 5 | String user, | ||
| 6 | long quantity, | ||
| 7 | String price, | ||
| 8 | boolean isBid) {} | ||
diff --git a/api/src/main/java/market/guess/model/market/OrderBookDTO.java b/api/src/main/java/market/guess/model/market/OrderBookDTO.java new file mode 100644 index 0000000..be0355e --- /dev/null +++ b/api/src/main/java/market/guess/model/market/OrderBookDTO.java | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | package market.guess.model.market; | ||
| 2 | |||
| 3 | import java.util.List; | ||
| 4 | |||
| 5 | public record OrderBookDTO( | ||
| 6 | String optionKey, | ||
| 7 | String optionName, | ||
| 8 | String bestBid, | ||
| 9 | String bestAsk, | ||
| 10 | String spread, | ||
| 11 | List<BookOrderDTO> orders) {} | ||