summaryrefslogtreecommitdiffstats
path: root/api/src/main/java
diff options
context:
space:
mode:
authorKostya <mail@sartin.in>2026-09-06 12:22:58 +0300
committerKostya <mail@sartin.in>2026-09-06 12:22:58 +0300
commit5bc7c4ed9d052668af66d3116a6b7afbe62c6eec (patch)
tree5a59cf98d0a01f93ef60d3b356c389445089c952 /api/src/main/java
parent508898f52c16cc737bc7d08b8ee4c29fab8d1146 (diff)
downloadguess-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')
-rw-r--r--api/src/main/java/market/guess/api/AccountContext.java10
-rw-r--r--api/src/main/java/market/guess/api/CatalogContext.java28
-rw-r--r--api/src/main/java/market/guess/api/GuessMarketContext.java12
-rw-r--r--api/src/main/java/market/guess/model/event/CreateEventRequest.java16
-rw-r--r--api/src/main/java/market/guess/model/event/EventDetailDTO.java5
-rw-r--r--api/src/main/java/market/guess/model/event/EventSummaryDTO.java3
-rw-r--r--api/src/main/java/market/guess/model/event/ParticipantDTO.java10
-rw-r--r--api/src/main/java/market/guess/model/market/BookOrderDTO.java8
-rw-r--r--api/src/main/java/market/guess/model/market/OrderBookDTO.java11
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 @@
1package market.guess.api;
2
3import java.util.List;
4import market.guess.model.ledger.LedgerDTO;
5
6public 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
3import java.nio.file.Path; 3import java.nio.file.Path;
4import java.util.List; 4import java.util.List;
5import market.guess.model.event.CommissionTiming;
6import market.guess.model.event.CreateEventRequest;
5import market.guess.model.event.EventDetailDTO; 7import market.guess.model.event.EventDetailDTO;
6import market.guess.model.event.EventSummaryDTO; 8import market.guess.model.event.EventSummaryDTO;
9import market.guess.model.event.MechanismType;
7 10
8public interface CatalogContext { 11public 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;
5import market.guess.model.market.PurchaseReceiptDTO; 5import market.guess.model.market.PurchaseReceiptDTO;
6 6
7public interface GuessMarketContext { 7public 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 @@
1package market.guess.model.event;
2
3import java.math.BigDecimal;
4import java.util.List;
5
6public 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
3import java.util.List; 3import java.util.List;
4import market.guess.model.market.MarketStateDTO; 4import market.guess.model.market.MarketStateDTO;
5import market.guess.model.market.OrderBookDTO;
5import market.guess.model.market.TradeRowDTO; 6import market.guess.model.market.TradeRowDTO;
6 7
7public record EventDetailDTO( 8public 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 @@
1package market.guess.model.event;
2
3public 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 @@
1package market.guess.model.market;
2
3public 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 @@
1package market.guess.model.market;
2
3import java.util.List;
4
5public record OrderBookDTO(
6 String optionKey,
7 String optionName,
8 String bestBid,
9 String bestAsk,
10 String spread,
11 List<BookOrderDTO> orders) {}