Skip to content

Commit 808ae3d

Browse files
committed
Update TradeRepository.kt
1 parent 7d03682 commit 808ae3d

1 file changed

Lines changed: 48 additions & 17 deletions

File tree

  • market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/dao

market/market-ports/market-persister-postgres/src/main/kotlin/co/nilin/opex/market/ports/postgres/dao/TradeRepository.kt

Lines changed: 48 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -217,21 +217,43 @@ interface TradeRepository : ReactiveCrudRepository<TradeModel, Long> {
217217
@Query("select symbol, matched_price from trades where create_date in (select max(create_date) from trades group by symbol)")
218218
fun findAllGroupBySymbol(): Flux<LastPrice>
219219

220-
@Query(
221-
"""
222-
WITH intervals AS (SELECT * FROM interval_generator((TO_TIMESTAMP(:startTime)) ::TIMESTAMP WITHOUT TIME ZONE, (:endTime), :interval ::INTERVAL)),
223-
first_trade AS (
224-
SELECT DISTINCT ON (f.start_time) f.start_time, f.end_time, t.matched_price AS open_price FROM intervals f
225-
LEFT JOIN trades t ON t.create_date >= f.start_time AND t.create_date < f.end_time AND t.symbol = :symbol
226-
ORDER BY f.start_time, t.create_date
227-
), last_trade AS (
228-
SELECT DISTINCT ON (f.start_time) f.start_time, f.end_time, t.matched_price AS close_price FROM intervals f
229-
LEFT JOIN trades t ON t.create_date >= f.start_time AND t.create_date < f.end_time AND t.symbol = :symbol
230-
ORDER BY f.start_time, t.create_date DESC
220+
@Query("""
221+
WITH intervals AS (
222+
SELECT *
223+
FROM interval_generator(
224+
(:startTime)::TIMESTAMP WITHOUT TIME ZONE,
225+
(:endTime)::TIMESTAMP WITHOUT TIME ZONE,
226+
:interval::INTERVAL
231227
)
228+
),
229+
first_trade AS (
230+
SELECT DISTINCT ON (f.start_time)
231+
f.start_time,
232+
f.end_time,
233+
t.matched_price AS open_price
234+
FROM intervals f
235+
LEFT JOIN trades t
236+
ON t.create_date >= f.start_time
237+
AND t.create_date < f.end_time
238+
AND t.symbol = :symbol
239+
ORDER BY f.start_time, t.create_date
240+
),
241+
last_trade AS (
242+
SELECT DISTINCT ON (f.start_time)
243+
f.start_time,
244+
f.end_time,
245+
t.matched_price AS close_price
246+
FROM intervals f
247+
LEFT JOIN trades t
248+
ON t.create_date >= f.start_time
249+
AND t.create_date < f.end_time
250+
AND t.symbol = :symbol
251+
ORDER BY f.start_time, t.create_date DESC
252+
),
253+
ohlcv AS (
232254
SELECT
233255
i.start_time AS open_time,
234-
i.end_time AS close_time,
256+
i.end_time AS close_time,
235257
ft.open_price AS open,
236258
MAX(t.matched_price) AS high,
237259
MIN(t.matched_price) AS low,
@@ -240,15 +262,24 @@ interface TradeRepository : ReactiveCrudRepository<TradeModel, Long> {
240262
COUNT(t.id) AS trades
241263
FROM intervals i
242264
LEFT JOIN trades t
243-
ON t.create_date >= i.start_time AND t.create_date < i.end_time AND t.symbol = :symbol
265+
ON t.create_date >= i.start_time
266+
AND t.create_date < i.end_time
267+
AND t.symbol = :symbol
244268
LEFT JOIN first_trade ft
245-
ON i.start_time = ft.start_time
269+
ON i.start_time = ft.start_time
246270
LEFT JOIN last_trade lt
247-
ON i.start_time = lt.start_time
271+
ON i.start_time = lt.start_time
248272
GROUP BY i.start_time, i.end_time, ft.open_price, lt.close_price
249-
ORDER BY i.start_time;
250-
"""
251273
)
274+
SELECT *
275+
FROM (
276+
SELECT *
277+
FROM ohlcv
278+
ORDER BY open_time DESC
279+
limit :limit
280+
) sub
281+
ORDER BY open_time ASC
282+
""")
252283
suspend fun candleData(
253284
@Param("symbol")
254285
symbol: String,

0 commit comments

Comments
 (0)