diff --git a/resources/queries.sql b/resources/queries.sql index 1797e76..e5e7a3c 100644 --- a/resources/queries.sql +++ b/resources/queries.sql @@ -155,6 +155,11 @@ SELECT id, event_id, occurred_at, exchange, fiat_amount, fiat_currency, FROM deposits ORDER BY occurred_at DESC, id DESC +-- :name get-kraken-hour-latest-60 :? :* +-- :doc Get the 60 most recent Kraken hourly candles +SELECT ts, open, high, low, close, vwap, volume, trade_count, created_at +FROM kraken_hour ORDER BY ts DESC LIMIT 60 + -- :name upsert-kraken-minute! :! :n -- :doc Upsert a Kraken minute OHLC candle INSERT INTO kraken_minute (ts, open, high, low, close, vwap, volume, trade_count) diff --git a/src/clj/pmagnus/btcdata/web/routes/api.clj b/src/clj/pmagnus/btcdata/web/routes/api.clj index aa35866..0d2c6f1 100644 --- a/src/clj/pmagnus/btcdata/web/routes/api.clj +++ b/src/clj/pmagnus/btcdata/web/routes/api.clj @@ -144,6 +144,22 @@ :headers {"Content-Type" "application/json"} :body (json/write-str {:error "Invalid date format, use YYYY-MM-DD"})})))) +(defn- kraken-hour-handler [{:keys [query-fn]} _req] + (let [rows (query-fn :get-kraken-hour-latest-60 {})] + {:status 200 + :headers {"Content-Type" "application/json"} + :body (json/write-str + (mapv (fn [r] + {:ts (:ts r) + :open (str (:open r)) + :high (str (:high r)) + :low (str (:low r)) + :close (str (:close r)) + :vwap (str (:vwap r)) + :volume (str (:volume r)) + :trade_count (:trade_count r)}) + rows))})) + (defn- api-routes [opts] [["/swagger.json" {:get {:no-doc true @@ -176,7 +192,9 @@ ["/deposits" {:get (fn [req] (tx/list-deposits opts req))}] ["/deposits/rebuild" - {:post (fn [req] (tx/rebuild-deposits! opts req))}]]) + {:post (fn [req] (tx/rebuild-deposits! opts req))}] + ["/kraken-hour" + {:get (fn [req] (kraken-hour-handler opts req))}]]) (defn route-data [opts] (merge