Fix Frankfurter integration: require namespace, use v1 API, show converted BTC prices
- Require frankfurter.rates namespace in core.clj so Integrant can find it - Use /v1/ prefix for self-hosted Frankfurter API - Display BTC price converted to EUR and DKK instead of raw exchange rates - Remove unused host port mapping for Frankfurter container Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -17,5 +17,3 @@ services:
|
|||||||
frankfurter:
|
frankfurter:
|
||||||
image: lineofflight/frankfurter
|
image: lineofflight/frankfurter
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
|
||||||
- "8080:8080"
|
|
||||||
|
|||||||
@@ -17,7 +17,8 @@
|
|||||||
[pmagnus.btcdata.ws.binance]
|
[pmagnus.btcdata.ws.binance]
|
||||||
;; Pollers
|
;; Pollers
|
||||||
[pmagnus.btcdata.kraken.ohlc]
|
[pmagnus.btcdata.kraken.ohlc]
|
||||||
[pmagnus.btcdata.kraken.ohlc-daily])
|
[pmagnus.btcdata.kraken.ohlc-daily]
|
||||||
|
[pmagnus.btcdata.frankfurter.rates])
|
||||||
(:gen-class))
|
(:gen-class))
|
||||||
|
|
||||||
(defonce system (atom nil))
|
(defonce system (atom nil))
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
(defn- fetch-rates
|
(defn- fetch-rates
|
||||||
"GET /latest?from=USD&to=EUR,DKK from Frankfurter. Returns {:EUR x :DKK y}."
|
"GET /latest?from=USD&to=EUR,DKK from Frankfurter. Returns {:EUR x :DKK y}."
|
||||||
[^HttpClient client base-url]
|
[^HttpClient client base-url]
|
||||||
(let [url (str base-url "/latest?from=USD&to=EUR,DKK")
|
(let [url (str base-url "/v1/latest?from=USD&to=EUR,DKK")
|
||||||
request (-> (HttpRequest/newBuilder)
|
request (-> (HttpRequest/newBuilder)
|
||||||
(.uri (URI. url))
|
(.uri (URI. url))
|
||||||
(.header "Accept" "application/json")
|
(.header "Accept" "application/json")
|
||||||
|
|||||||
@@ -23,8 +23,8 @@
|
|||||||
(cond-> {:price (str price)
|
(cond-> {:price (str price)
|
||||||
:prev_price (when prev-price (str prev-price))
|
:prev_price (when prev-price (str prev-price))
|
||||||
:recorded_at (str recorded-at)}
|
:recorded_at (str recorded-at)}
|
||||||
rates (assoc :eur (str (:eur rates))
|
rates (assoc :price_eur (str (.multiply (bigdec price) (:eur rates)))
|
||||||
:dkk (str (:dkk rates))))))
|
:price_dkk (str (.multiply (bigdec price) (:dkk rates)))))))
|
||||||
|
|
||||||
(def ^:private ts-fmt (DateTimeFormatter/ofPattern "dd-MM HH:mm:ss"))
|
(def ^:private ts-fmt (DateTimeFormatter/ofPattern "dd-MM HH:mm:ss"))
|
||||||
|
|
||||||
@@ -42,11 +42,11 @@
|
|||||||
"<div class=\"text-center\">"
|
"<div class=\"text-center\">"
|
||||||
"<p class=\"text-4xl font-bold " color "\">$" (format "%,.2f" p) "</p>"
|
"<p class=\"text-4xl font-bold " color "\">$" (format "%,.2f" p) "</p>"
|
||||||
(when rates
|
(when rates
|
||||||
(let [eur (double (:eur rates))
|
(let [p-eur (double (.multiply (bigdec price) (:eur rates)))
|
||||||
dkk (double (:dkk rates))]
|
p-dkk (double (.multiply (bigdec price) (:dkk rates)))]
|
||||||
(str "<div class=\"flex justify-center gap-4 mt-3\">"
|
(str "<div class=\"flex justify-center gap-4 mt-3\">"
|
||||||
"<span class=\"text-sm text-gray-600\">EUR " (format "%.4f" eur) "</span>"
|
"<span class=\"text-sm text-gray-600\">\u20AC" (format "%,.2f" p-eur) "</span>"
|
||||||
"<span class=\"text-sm text-gray-600\">DKK " (format "%.4f" dkk) "</span>"
|
"<span class=\"text-sm text-gray-600\">" (format "%,.2f" p-dkk) " kr</span>"
|
||||||
"</div>")))
|
"</div>")))
|
||||||
"<p class=\"text-xs text-gray-400 mt-2\">Updated " ts "</p>"
|
"<p class=\"text-xs text-gray-400 mt-2\">Updated " ts "</p>"
|
||||||
"</div></div></div>")))
|
"</div></div></div>")))
|
||||||
|
|||||||
Reference in New Issue
Block a user