From 0fc488c3f9e29f5e9f1092f8081714c9e820f178 Mon Sep 17 00:00:00 2001 From: Kostya Date: Thu, 20 Aug 2026 12:09:20 +0300 Subject: Move CommissionTiming and MechanismType into model.event package Groups them with the other event-domain enums instead of the general api package, and updates all call sites accordingly. --- api/src/main/java/market/guess/api/CommissionTiming.java | 6 ------ api/src/main/java/market/guess/api/MarketStateDTO.java | 1 + api/src/main/java/market/guess/api/MechanismType.java | 6 ------ api/src/main/java/market/guess/model/event/CommissionTiming.java | 6 ++++++ api/src/main/java/market/guess/model/event/EventSummaryDTO.java | 2 -- api/src/main/java/market/guess/model/event/MechanismType.java | 6 ++++++ .../service/catalog/infrastructure/adapter/EventDeserializer.java | 6 ++++-- .../catalog/infrastructure/adapter/TradingMechanismAdapter.java | 6 +++--- .../service/catalog/infrastructure/mapper/v1/EventMapperV1.java | 2 +- .../service/catalog/infrastructure/mapper/v2/EventMapperV2.java | 2 +- service/src/main/java/market/guess/service/domain/Event.java | 2 +- .../market/guess/service/fulfillment/LocalFulfillmentContext.java | 2 +- .../java/market/guess/service/mechanism/LmsrTradingMechanism.java | 2 +- .../market/guess/service/mechanism/OrderBookTradingMechanism.java | 2 +- .../main/java/market/guess/service/mechanism/TradingMechanism.java | 2 +- .../market/guess/service/settlement/LocalSettlementContext.java | 6 +++--- service/src/test/java/market/guess/service/Ex1FullTest.java | 4 +--- .../market/guess/ui/console/command/EventDetailsMenuCommand.java | 3 ++- .../java/market/guess/ui/console/command/ListEventsMenuCommand.java | 5 +++-- 19 files changed, 36 insertions(+), 35 deletions(-) delete mode 100644 api/src/main/java/market/guess/api/CommissionTiming.java delete mode 100644 api/src/main/java/market/guess/api/MechanismType.java create mode 100644 api/src/main/java/market/guess/model/event/CommissionTiming.java create mode 100644 api/src/main/java/market/guess/model/event/MechanismType.java diff --git a/api/src/main/java/market/guess/api/CommissionTiming.java b/api/src/main/java/market/guess/api/CommissionTiming.java deleted file mode 100644 index 29861e3..0000000 --- a/api/src/main/java/market/guess/api/CommissionTiming.java +++ /dev/null @@ -1,6 +0,0 @@ -package market.guess.api; - -public enum CommissionTiming { - ON_CLOSE, - ON_PURCHASE -} diff --git a/api/src/main/java/market/guess/api/MarketStateDTO.java b/api/src/main/java/market/guess/api/MarketStateDTO.java index 1f7e79b..da2fff0 100644 --- a/api/src/main/java/market/guess/api/MarketStateDTO.java +++ b/api/src/main/java/market/guess/api/MarketStateDTO.java @@ -1,6 +1,7 @@ package market.guess.api; import java.util.List; +import market.guess.model.event.MechanismType; public record MarketStateDTO( String eventKey, diff --git a/api/src/main/java/market/guess/api/MechanismType.java b/api/src/main/java/market/guess/api/MechanismType.java deleted file mode 100644 index f478041..0000000 --- a/api/src/main/java/market/guess/api/MechanismType.java +++ /dev/null @@ -1,6 +0,0 @@ -package market.guess.api; - -public enum MechanismType { - LMSR, - ORDER_BOOK -} diff --git a/api/src/main/java/market/guess/model/event/CommissionTiming.java b/api/src/main/java/market/guess/model/event/CommissionTiming.java new file mode 100644 index 0000000..fff8b6b --- /dev/null +++ b/api/src/main/java/market/guess/model/event/CommissionTiming.java @@ -0,0 +1,6 @@ +package market.guess.model.event; + +public enum CommissionTiming { + ON_CLOSE, + ON_PURCHASE +} 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 1595f81..42762c2 100644 --- a/api/src/main/java/market/guess/model/event/EventSummaryDTO.java +++ b/api/src/main/java/market/guess/model/event/EventSummaryDTO.java @@ -1,8 +1,6 @@ package market.guess.model.event; import java.util.List; -import market.guess.api.CommissionTiming; -import market.guess.api.MechanismType; public record EventSummaryDTO( String key, diff --git a/api/src/main/java/market/guess/model/event/MechanismType.java b/api/src/main/java/market/guess/model/event/MechanismType.java new file mode 100644 index 0000000..6063881 --- /dev/null +++ b/api/src/main/java/market/guess/model/event/MechanismType.java @@ -0,0 +1,6 @@ +package market.guess.model.event; + +public enum MechanismType { + LMSR, + ORDER_BOOK +} diff --git a/service/src/main/java/market/guess/service/catalog/infrastructure/adapter/EventDeserializer.java b/service/src/main/java/market/guess/service/catalog/infrastructure/adapter/EventDeserializer.java index 69a8447..e40d633 100644 --- a/service/src/main/java/market/guess/service/catalog/infrastructure/adapter/EventDeserializer.java +++ b/service/src/main/java/market/guess/service/catalog/infrastructure/adapter/EventDeserializer.java @@ -7,7 +7,7 @@ import com.google.gson.JsonParseException; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.List; -import market.guess.api.CommissionTiming; +import market.guess.model.event.CommissionTiming; import market.guess.model.event.EventStatus; import market.guess.service.domain.Event; import market.guess.service.domain.Market; @@ -45,7 +45,9 @@ public final class EventDeserializer implements JsonDeserializer { obj.get("runningId").getAsInt(), trades, context.deserialize(obj.get("state"), EventStatus.class), - winningOptionKey == null || winningOptionKey.isJsonNull() ? null : winningOptionKey.getAsString(), + winningOptionKey == null || winningOptionKey.isJsonNull() + ? null + : winningOptionKey.getAsString(), obj.get("settlementCommission").getAsBigDecimal()); } } diff --git a/service/src/main/java/market/guess/service/catalog/infrastructure/adapter/TradingMechanismAdapter.java b/service/src/main/java/market/guess/service/catalog/infrastructure/adapter/TradingMechanismAdapter.java index ac3da8b..1fa2b9a 100644 --- a/service/src/main/java/market/guess/service/catalog/infrastructure/adapter/TradingMechanismAdapter.java +++ b/service/src/main/java/market/guess/service/catalog/infrastructure/adapter/TradingMechanismAdapter.java @@ -7,14 +7,14 @@ import com.google.gson.JsonParseException; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import java.lang.reflect.Type; -import market.guess.api.MechanismType; +import market.guess.model.event.MechanismType; import market.guess.service.mechanism.LmsrTradingMechanism; import market.guess.service.mechanism.OrderBookTradingMechanism; import market.guess.service.mechanism.TradingMechanism; /** - * TradingMechanism is a sealed interface, so Gson can't tell which implementation to build from - * the JSON alone; this tags the JSON with a type discriminator and dispatches on it. + * TradingMechanism is a sealed interface, so Gson can't tell which implementation to build from the + * JSON alone; this tags the JSON with a type discriminator and dispatches on it. */ public final class TradingMechanismAdapter implements JsonSerializer, JsonDeserializer { diff --git a/service/src/main/java/market/guess/service/catalog/infrastructure/mapper/v1/EventMapperV1.java b/service/src/main/java/market/guess/service/catalog/infrastructure/mapper/v1/EventMapperV1.java index b9c43bb..fa1c5ab 100644 --- a/service/src/main/java/market/guess/service/catalog/infrastructure/mapper/v1/EventMapperV1.java +++ b/service/src/main/java/market/guess/service/catalog/infrastructure/mapper/v1/EventMapperV1.java @@ -2,7 +2,7 @@ package market.guess.service.catalog.infrastructure.mapper.v1; import java.util.ArrayList; import java.util.List; -import market.guess.api.CommissionTiming; +import market.guess.model.event.CommissionTiming; import market.guess.model.event.EventStatus; import market.guess.service.catalog.infrastructure.mapper.Mapper; import market.guess.service.catalog.model.v1.GMEvent; diff --git a/service/src/main/java/market/guess/service/catalog/infrastructure/mapper/v2/EventMapperV2.java b/service/src/main/java/market/guess/service/catalog/infrastructure/mapper/v2/EventMapperV2.java index 82455f1..bcdce94 100644 --- a/service/src/main/java/market/guess/service/catalog/infrastructure/mapper/v2/EventMapperV2.java +++ b/service/src/main/java/market/guess/service/catalog/infrastructure/mapper/v2/EventMapperV2.java @@ -2,7 +2,7 @@ package market.guess.service.catalog.infrastructure.mapper.v2; import java.util.ArrayList; import java.util.List; -import market.guess.api.CommissionTiming; +import market.guess.model.event.CommissionTiming; import market.guess.model.event.EventStatus; import market.guess.service.catalog.infrastructure.mapper.Mapper; import market.guess.service.catalog.model.v2.GMEvent; diff --git a/service/src/main/java/market/guess/service/domain/Event.java b/service/src/main/java/market/guess/service/domain/Event.java index e1b366e..1e17457 100644 --- a/service/src/main/java/market/guess/service/domain/Event.java +++ b/service/src/main/java/market/guess/service/domain/Event.java @@ -4,10 +4,10 @@ import java.math.BigDecimal; import java.time.Instant; import java.util.ArrayList; import java.util.List; -import market.guess.api.CommissionTiming; import market.guess.api.MarketDTO; import market.guess.api.MarketStateDTO; import market.guess.api.TradeRowDTO; +import market.guess.model.event.CommissionTiming; import market.guess.model.event.EventStatus; import market.guess.model.event.EventSummaryDTO; import market.guess.model.ledger.LedgerType; diff --git a/service/src/main/java/market/guess/service/fulfillment/LocalFulfillmentContext.java b/service/src/main/java/market/guess/service/fulfillment/LocalFulfillmentContext.java index cbbfafd..d1006bc 100644 --- a/service/src/main/java/market/guess/service/fulfillment/LocalFulfillmentContext.java +++ b/service/src/main/java/market/guess/service/fulfillment/LocalFulfillmentContext.java @@ -3,7 +3,7 @@ package market.guess.service.fulfillment; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import market.guess.api.CommissionTiming; +import market.guess.model.event.CommissionTiming; import market.guess.model.ledger.LedgerType; import market.guess.service.domain.Order; import market.guess.service.domain.Trade; diff --git a/service/src/main/java/market/guess/service/mechanism/LmsrTradingMechanism.java b/service/src/main/java/market/guess/service/mechanism/LmsrTradingMechanism.java index 981e733..c133ac7 100644 --- a/service/src/main/java/market/guess/service/mechanism/LmsrTradingMechanism.java +++ b/service/src/main/java/market/guess/service/mechanism/LmsrTradingMechanism.java @@ -5,7 +5,7 @@ import java.time.Clock; import java.time.Instant; import java.util.Arrays; import java.util.List; -import market.guess.api.MechanismType; +import market.guess.model.event.MechanismType; import market.guess.service.domain.Event; import market.guess.service.domain.Market; import market.guess.service.domain.Trade; diff --git a/service/src/main/java/market/guess/service/mechanism/OrderBookTradingMechanism.java b/service/src/main/java/market/guess/service/mechanism/OrderBookTradingMechanism.java index fd03750..ba88d06 100644 --- a/service/src/main/java/market/guess/service/mechanism/OrderBookTradingMechanism.java +++ b/service/src/main/java/market/guess/service/mechanism/OrderBookTradingMechanism.java @@ -5,7 +5,7 @@ import java.math.RoundingMode; import java.time.Instant; import java.util.ArrayList; import java.util.List; -import market.guess.api.MechanismType; +import market.guess.model.event.MechanismType; import market.guess.service.domain.Event; import market.guess.service.domain.Market; import market.guess.service.domain.Trade; diff --git a/service/src/main/java/market/guess/service/mechanism/TradingMechanism.java b/service/src/main/java/market/guess/service/mechanism/TradingMechanism.java index 30d076d..90e696d 100644 --- a/service/src/main/java/market/guess/service/mechanism/TradingMechanism.java +++ b/service/src/main/java/market/guess/service/mechanism/TradingMechanism.java @@ -3,7 +3,7 @@ package market.guess.service.mechanism; import java.math.BigDecimal; import java.time.Instant; import java.util.List; -import market.guess.api.MechanismType; +import market.guess.model.event.MechanismType; import market.guess.service.domain.Event; import market.guess.service.domain.Market; import market.guess.service.domain.Trade; diff --git a/service/src/main/java/market/guess/service/settlement/LocalSettlementContext.java b/service/src/main/java/market/guess/service/settlement/LocalSettlementContext.java index f6e9b67..d970b03 100644 --- a/service/src/main/java/market/guess/service/settlement/LocalSettlementContext.java +++ b/service/src/main/java/market/guess/service/settlement/LocalSettlementContext.java @@ -2,7 +2,7 @@ package market.guess.service.settlement; import java.math.BigDecimal; import java.util.HashMap; -import market.guess.api.CommissionTiming; +import market.guess.model.event.CommissionTiming; import market.guess.model.event.EventStatus; import market.guess.model.ledger.LedgerType; import market.guess.service.domain.Event; @@ -20,6 +20,7 @@ public final class LocalSettlementContext implements SettlementContext { public BigDecimal settle(Event event, String winningOptionKey) { event.setWinningOptionKey(winningOptionKey); + // TODO: abstract the commission charge away var chargeCommission = event.getCommissionTiming() == CommissionTiming.ON_CLOSE; var rate = BigDecimal.valueOf(event.getCommissionPercent()).divide(BigDecimal.valueOf(100)); var winningOption = event.getOption(winningOptionKey); @@ -40,8 +41,7 @@ public final class LocalSettlementContext implements SettlementContext { var net = gross.subtract(commission); ledger.credit(entry.getKey(), LedgerType.PAYOUT, net, "Payout: " + winningOption.getName()); - ledger.debit( - event.getLedger(), LedgerType.PAYOUT, net, "Payout: " + winningOption.getName()); + ledger.debit(event.getLedger(), LedgerType.PAYOUT, net, "Payout: " + winningOption.getName()); event.addSettlementCommission(commission); totalPayout = totalPayout.add(net); } diff --git a/service/src/test/java/market/guess/service/Ex1FullTest.java b/service/src/test/java/market/guess/service/Ex1FullTest.java index 6718142..38d21c2 100644 --- a/service/src/test/java/market/guess/service/Ex1FullTest.java +++ b/service/src/test/java/market/guess/service/Ex1FullTest.java @@ -7,7 +7,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.time.Instant; import java.util.List; -import market.guess.api.CommissionTiming; +import market.guess.model.event.CommissionTiming; import market.guess.model.event.EventStatus; import market.guess.service.catalog.LocalCatalogContext; import market.guess.service.catalog.infrastructure.MarketContext; @@ -18,9 +18,7 @@ import market.guess.service.catalog.infrastructure.repository.InMemoryEventRepos import market.guess.service.catalog.infrastructure.repository.InMemoryUserRepository; import market.guess.service.domain.Event; import market.guess.service.domain.Market; -import market.guess.service.domain.User; import market.guess.service.fulfillment.LocalFulfillmentContext; -import market.guess.service.helpers.BigDecimalOptions; import market.guess.service.ledger.LedgerContext; import market.guess.service.matching.LocalMatchingEngine; import market.guess.service.mechanism.LmsrTradingMechanism; diff --git a/ui-console/src/main/java/market/guess/ui/console/command/EventDetailsMenuCommand.java b/ui-console/src/main/java/market/guess/ui/console/command/EventDetailsMenuCommand.java index bdd3eb1..642ad78 100644 --- a/ui-console/src/main/java/market/guess/ui/console/command/EventDetailsMenuCommand.java +++ b/ui-console/src/main/java/market/guess/ui/console/command/EventDetailsMenuCommand.java @@ -1,6 +1,7 @@ package market.guess.ui.console.command; import market.guess.api.CatalogContext; +import market.guess.model.event.CommissionTiming; import market.guess.model.event.EventStatus; import market.guess.ui.console.io.InputProcessor; @@ -65,7 +66,7 @@ public final class EventDetailsMenuCommand implements MenuCommand { "Commission: %d%% (%s)" .formatted( event.summary().commissionPercent(), - event.summary().commissionTiming() == market.guess.api.CommissionTiming.ON_CLOSE + event.summary().commissionTiming() == CommissionTiming.ON_CLOSE ? "on-close" : "on-purchase")); io.println("Status: %s".formatted(event.summary().status())); diff --git a/ui-console/src/main/java/market/guess/ui/console/command/ListEventsMenuCommand.java b/ui-console/src/main/java/market/guess/ui/console/command/ListEventsMenuCommand.java index 01e93bd..3dfe662 100644 --- a/ui-console/src/main/java/market/guess/ui/console/command/ListEventsMenuCommand.java +++ b/ui-console/src/main/java/market/guess/ui/console/command/ListEventsMenuCommand.java @@ -1,7 +1,7 @@ package market.guess.ui.console.command; import market.guess.api.CatalogContext; -import market.guess.api.CommissionTiming; +import market.guess.model.event.CommissionTiming; import market.guess.ui.console.io.InputProcessor; public final class ListEventsMenuCommand implements MenuCommand { @@ -41,7 +41,8 @@ public final class ListEventsMenuCommand implements MenuCommand { for (var event : events) { io.newLine(); - io.println(" [%d] %s (ID: %d)".formatted(event.displayId(), event.name(), event.displayId())); + io.println( + " [%d] %s (ID: %d)".formatted(event.displayId(), event.name(), event.displayId())); io.println(" Description: %s".formatted(event.description())); io.println( " Commission: %d%% (%s)" -- cgit v1.2.3