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:
2026-02-27 14:43:19 +01:00
co-authored by Claude Opus 4.6
parent 7d6ca3911f
commit 46666aa994
4 changed files with 9 additions and 10 deletions
-2
View File
@@ -17,5 +17,3 @@ services:
frankfurter: frankfurter:
image: lineofflight/frankfurter image: lineofflight/frankfurter
restart: unless-stopped restart: unless-stopped
ports:
- "8080:8080"
+2 -1
View File
@@ -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")
+6 -6
View File
@@ -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>")))