From 94c56b7cc3cdee79bd2f578e2f34941b1a7b1c91 Mon Sep 17 00:00:00 2001 From: Per Magnus Petersen Date: Mon, 16 Mar 2026 13:11:33 +0100 Subject: [PATCH] Fall back to DB for price when Binance websocket not connected The /api/price/latest endpoint now reads the latest row from binance_price table when the in-memory atom is empty on startup. Co-Authored-By: Claude Opus 4.6 --- src/clj/pmagnus/btcdata/web/routes/api.clj | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/clj/pmagnus/btcdata/web/routes/api.clj b/src/clj/pmagnus/btcdata/web/routes/api.clj index 0b98b7e..85a4d71 100644 --- a/src/clj/pmagnus/btcdata/web/routes/api.clj +++ b/src/clj/pmagnus/btcdata/web/routes/api.clj @@ -87,10 +87,14 @@ {:on-open (fn [{:keys [^WebSocketChannel channel]}] (start-strike-ws-loop! channel strike-atom))}})) -(defn- latest-price-handler [{:keys [binance frankfurter]} _req] +(defn- latest-price-handler [{:keys [binance frankfurter query-fn]} _req] (let [price-atom (:latest-price binance) rates-atom (:rates frankfurter) - v @price-atom] + v (or @price-atom + (when-let [row (query-fn :get-latest-binance-price {})] + {:price (:price row) + :prev-price (:price row) + :recorded-at (:recorded_at row)}))] (if v {:status 200 :headers {"Content-Type" "application/json"}