diff --git a/market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/dao/TradeRepository.kt b/market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/dao/TradeRepository.kt index 41a32fb4c..c0eacbe01 100644 --- a/market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/dao/TradeRepository.kt +++ b/market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/dao/TradeRepository.kt @@ -1,6 +1,8 @@ package co.nilin.opex.market.ports.postgres.dao import co.nilin.opex.market.core.inout.* +import co.nilin.opex.market.ports.postgres.data.MarketTradeProjection +import co.nilin.opex.market.ports.postgres.data.TradeUserContextProjection import co.nilin.opex.market.ports.postgres.model.* import org.springframework.data.r2dbc.repository.Query import org.springframework.data.repository.query.Param @@ -32,9 +34,8 @@ interface TradeRepository : ReactiveCrudRepository { """ SELECT t.symbol AS symbol, - t.base_asset AS baseAsset, - t.quote_asset AS quoteAsset, - + t.base_asset AS base_asset, + t.quote_asset AS quote_asset, t.trade_id AS id, t.matched_price AS price, t.matched_quantity AS quantity, @@ -46,24 +47,15 @@ interface TradeRepository : ReactiveCrudRepository { ELSE to2.quote_quantity END, 0 - ) AS quoteQuantity, + ) AS quote_quantity, - t.create_date AS createDate, + t.create_date AS create_date, - COALESCE( - CASE - WHEN mo.side = 'BID' - THEN TRUE - ELSE FALSE - END, - FALSE - ) AS isMakerBuyer, - - NULL AS ouid, - NULL AS commission, - NULL AS commissionAsset, - NULL AS isBuyer, - NULL AS isMaker + CASE + WHEN mo.side = 'BID' + THEN TRUE + ELSE FALSE + END AS is_maker_buyer FROM trades t @@ -80,12 +72,9 @@ interface TradeRepository : ReactiveCrudRepository { """ ) fun findRecentMarketTrades( - @Param("symbol") - symbol: String?, - - @Param("limit") - limit: Int - ): Flux + @Param("symbol") symbol: String?, + @Param("limit") limit: Int + ): Flux @Query(""" diff --git a/market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/data/MarketTradeProjection.kt b/market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/data/MarketTradeProjection.kt new file mode 100644 index 000000000..f24cc5c63 --- /dev/null +++ b/market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/data/MarketTradeProjection.kt @@ -0,0 +1,16 @@ +package co.nilin.opex.market.ports.postgres.data + +import java.math.BigDecimal +import java.time.LocalDateTime + +data class MarketTradeProjection( + val symbol: String, + val baseAsset: String, + val quoteAsset: String, + val id: Long, + val price: BigDecimal, + val quantity: BigDecimal, + val quoteQuantity: BigDecimal, + val createDate: LocalDateTime, + val isMakerBuyer: Boolean +) \ No newline at end of file diff --git a/market/market-core/src/main/kotlin/co/nilin/opex/market/core/inout/TradeUserContextProjection.kt b/market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/data/TradeUserContextProjection.kt similarity index 91% rename from market/market-core/src/main/kotlin/co/nilin/opex/market/core/inout/TradeUserContextProjection.kt rename to market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/data/TradeUserContextProjection.kt index 53aab72fe..5ff2a61a5 100644 --- a/market/market-core/src/main/kotlin/co/nilin/opex/market/core/inout/TradeUserContextProjection.kt +++ b/market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/data/TradeUserContextProjection.kt @@ -1,4 +1,4 @@ -package co.nilin.opex.market.core.inout +package co.nilin.opex.market.ports.postgres.data import java.math.BigDecimal import java.time.LocalDateTime @@ -18,5 +18,4 @@ data class TradeUserContextProjection( val commissionAsset: String? = null, val isBuyer: Boolean? = null, val isMaker: Boolean? = null -) - +) \ No newline at end of file diff --git a/market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/impl/MarketQueryHandlerImpl.kt b/market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/impl/MarketQueryHandlerImpl.kt index 6ec4b0c27..fe8673002 100644 --- a/market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/impl/MarketQueryHandlerImpl.kt +++ b/market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/impl/MarketQueryHandlerImpl.kt @@ -89,8 +89,8 @@ class MarketQueryHandlerImpl( .map { MarketTrade( symbol = it.symbol, - baseAsset = it.baseAsset!!, - quoteAsset = it.quoteAsset!!, + baseAsset = it.baseAsset, + quoteAsset = it.quoteAsset, id = it.id, price = it.price, quantity = it.quantity, diff --git a/market/market-ports/market-persister-postgres/src/test/kotlin/co/nilin/opex/market/ports/postgres/impl/MarketQueryHandlerTest.kt b/market/market-ports/market-persister-postgres/src/test/kotlin/co/nilin/opex/market/ports/postgres/impl/MarketQueryHandlerTest.kt index b496540d6..bb25377ae 100644 --- a/market/market-ports/market-persister-postgres/src/test/kotlin/co/nilin/opex/market/ports/postgres/impl/MarketQueryHandlerTest.kt +++ b/market/market-ports/market-persister-postgres/src/test/kotlin/co/nilin/opex/market/ports/postgres/impl/MarketQueryHandlerTest.kt @@ -116,7 +116,7 @@ class MarketQueryHandlerTest { } returns Flux.just(VALID.TRADE_MODEL) every { tradeRepository.findRecentMarketTrades(VALID.ETH_USDT, 1) - } returns Flux.just(VALID.TRADE_USER_CONTEXT) + } returns Flux.just(VALID.MARKET_TRADE) every { orderRepository.findByOuid(VALID.TRADE_MODEL.makerOuid) } returns Mono.just(VALID.MAKER_ORDER_MODEL) diff --git a/market/market-ports/market-persister-postgres/src/test/kotlin/co/nilin/opex/market/ports/postgres/impl/sample/Samples.kt b/market/market-ports/market-persister-postgres/src/test/kotlin/co/nilin/opex/market/ports/postgres/impl/sample/Samples.kt index 1556b0d10..0eca09735 100644 --- a/market/market-ports/market-persister-postgres/src/test/kotlin/co/nilin/opex/market/ports/postgres/impl/sample/Samples.kt +++ b/market/market-ports/market-persister-postgres/src/test/kotlin/co/nilin/opex/market/ports/postgres/impl/sample/Samples.kt @@ -4,6 +4,8 @@ import co.nilin.opex.market.core.event.RichOrder import co.nilin.opex.market.core.event.RichOrderUpdate import co.nilin.opex.market.core.event.RichTrade import co.nilin.opex.market.core.inout.* +import co.nilin.opex.market.ports.postgres.data.MarketTradeProjection +import co.nilin.opex.market.ports.postgres.data.TradeUserContextProjection import co.nilin.opex.market.ports.postgres.model.LastPrice import co.nilin.opex.market.ports.postgres.model.OrderModel import co.nilin.opex.market.ports.postgres.model.OrderStatusModel @@ -126,6 +128,19 @@ object VALID { true ) + val MARKET_TRADE = MarketTradeProjection( + ETH_USDT, + "ETH", + "USDT", + 1, + BigDecimal.valueOf(100000), + BigDecimal.valueOf(0.001), // Minimum of orders quantities + BigDecimal.valueOf(100).stripTrailingZeros(), + UPDATE_DATE, + false, + + ) + val LAST_PRICE_MODEL = LastPrice("ETH_USDT", BigDecimal.valueOf(100000)) val AGGREGATED_ORDER_PRICE_MODEL = AggregatedOrderPriceModel(