implement market overview endpoint
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
package com.frankenergie.smartasset.controller
|
||||
|
||||
import com.frankenergie.smartasset.model.MarketOverviewResponse
|
||||
import com.frankenergie.smartasset.model.OrderUpdateRequest
|
||||
import com.frankenergie.smartasset.model.OrderUpdateResponse
|
||||
import com.frankenergie.smartasset.service.OrderBookService
|
||||
import org.springframework.http.ResponseEntity
|
||||
import org.springframework.web.bind.annotation.GetMapping
|
||||
import org.springframework.web.bind.annotation.RequestBody
|
||||
import org.springframework.web.bind.annotation.RequestMapping
|
||||
import org.springframework.web.bind.annotation.RestController
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api")
|
||||
class MarketOverviewController(private val orderBookService: OrderBookService) {
|
||||
@GetMapping("/market/overview")
|
||||
fun getMarketOverview(): ResponseEntity<MarketOverviewResponse> {
|
||||
val response = orderBookService.getMarketOverview()
|
||||
return ResponseEntity.ok(response)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.frankenergie.smartasset.model
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import java.math.BigDecimal
|
||||
import java.time.LocalDateTime
|
||||
|
||||
data class QuarterOverview(
|
||||
@JsonProperty("delivery_start_time") val deliveryStartTime: LocalDateTime,
|
||||
@JsonProperty("delivery_end_time") val deliveryEndTime: LocalDateTime,
|
||||
@JsonProperty("highest_buy_price") val highestBuyPrice: BigDecimal?,
|
||||
@JsonProperty("lowest_sell_price") val lowestSellPrice: BigDecimal?
|
||||
)
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.frankenergie.smartasset.model
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import java.math.BigDecimal
|
||||
import java.time.LocalDateTime
|
||||
|
||||
data class MarketOverviewResponse(
|
||||
@JsonProperty("quarters") val quarters: List<QuarterOverview>
|
||||
)
|
||||
@@ -2,8 +2,10 @@ package com.frankenergie.smartasset.service
|
||||
|
||||
import com.frankenergie.smartasset.domain.OrderBook
|
||||
import com.frankenergie.smartasset.model.DeliveryPeriod
|
||||
import com.frankenergie.smartasset.model.MarketOverviewResponse
|
||||
import com.frankenergie.smartasset.model.OrderUpdateRequest
|
||||
import com.frankenergie.smartasset.model.OrderUpdateResponse
|
||||
import com.frankenergie.smartasset.model.QuarterOverview
|
||||
import org.springframework.stereotype.Service
|
||||
import java.time.Instant
|
||||
import java.util.UUID
|
||||
@@ -30,5 +32,19 @@ class OrderBookService {
|
||||
return OrderUpdateResponse(orderId = orderId, status = status, timestamp = Instant.now())
|
||||
}
|
||||
|
||||
fun getMarketOverview(): MarketOverviewResponse {
|
||||
val quarters = orderBook.getAllPeriods()
|
||||
.sortedBy { it.startTime }
|
||||
.map { period ->
|
||||
QuarterOverview(
|
||||
deliveryStartTime = period.startTime,
|
||||
deliveryEndTime = period.endTime,
|
||||
highestBuyPrice = orderBook.getBestBid(period)?.price,
|
||||
lowestSellPrice = orderBook.getBestAsk(period)?.price
|
||||
)
|
||||
}
|
||||
return MarketOverviewResponse(quarters)
|
||||
}
|
||||
|
||||
fun getOrderBook(): OrderBook = orderBook
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user