summaryrefslogtreecommitdiff
path: root/src/FundLab.Api/App.fs
diff options
context:
space:
mode:
Diffstat (limited to 'src/FundLab.Api/App.fs')
-rw-r--r--src/FundLab.Api/App.fs26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/FundLab.Api/App.fs b/src/FundLab.Api/App.fs
index b083c37..9565485 100644
--- a/src/FundLab.Api/App.fs
+++ b/src/FundLab.Api/App.fs
@@ -357,6 +357,7 @@ type MarketProbes =
NavDates: INavDateProbe
NavSeries: INavSeriesProbe
BondQuotes: IBondQuoteProbe
+ StockQuotes: IStockQuoteProbe
}
type BondQuoteApiResponse =
@@ -367,6 +368,14 @@ type BondQuoteApiResponse =
maturityDate: string option
}
+type StockQuoteApiResponse =
+ {
+ code: string
+ name: string option
+ price: string option
+ currency: string
+ }
+
module App =
let addOptionFriendlyJson (services: IServiceCollection) =
let settings =
@@ -1728,11 +1737,28 @@ module App =
ctx
| Error failure -> marketDataError failure next ctx
+ let private getStockQuote (probe: IStockQuoteProbe) : HttpHandler =
+ fun next ctx ->
+ let code = ctx.Request.Query["code"].ToString()
+
+ match probe.GetQuote(code, ctx.RequestAborted) with
+ | Ok quote ->
+ json
+ ({ code = quote.Code
+ name = quote.Name
+ price = quote.Price |> Option.map decimalText
+ currency = quote.Currency }
+ : StockQuoteApiResponse)
+ next
+ ctx
+ | Error failure -> marketDataError failure next ctx
+
let private marketProbeRoutes (probes: MarketProbes) =
[
GET >=> route "/market/nav-dates" >=> getMarketNavDates probes.NavDates
GET >=> route "/market/nav-series" >=> getMarketNavSeries probes.NavSeries
GET >=> route "/market/bond-quote" >=> getBondQuote probes.BondQuotes
+ GET >=> route "/market/stock-quote" >=> getStockQuote probes.StockQuotes
]
let private createApplicationInternal