GET /api/deposits/totals returns fiat deposited per exchange per currency from bank_to_exchange events, aggregated via SQL. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
54 lines
2.2 KiB
Clojure
54 lines
2.2 KiB
Clojure
(ns pmagnus.btcdata.web.controllers.transactions
|
|
(:require
|
|
[clojure.string :as str]
|
|
[ring.util.http-response :as response])
|
|
(:import
|
|
[java.time Instant]
|
|
[java.util UUID]))
|
|
|
|
(defn list-wallets [{:keys [query-fn]} _req]
|
|
(response/ok (query-fn :get-all-wallets {})))
|
|
|
|
(defn create-wallet! [{:keys [query-fn]} req]
|
|
(let [{:keys [name]} (:body-params req)]
|
|
(if (str/blank? name)
|
|
(response/bad-request {:error "name is required"})
|
|
(do (query-fn :insert-wallet! {:name name})
|
|
(response/created "/api/wallets" {:name name})))))
|
|
|
|
(defn get-wallet-balances [{:keys [query-fn]} _req]
|
|
(response/ok (query-fn :get-wallet-balances {})))
|
|
|
|
(defn create-event! [{:keys [query-fn]} req]
|
|
(let [params (:body-params req)
|
|
event-type (:event_type params)]
|
|
(if-not (#{"bank_to_exchange" "exchange_to_wallet" "wallet_to_wallet"} event-type)
|
|
(response/bad-request {:error "Invalid event_type"})
|
|
(let [occurred-at (if-let [ts (:occurred_at params)]
|
|
(Instant/parse ts)
|
|
(Instant/now))
|
|
row {:event-type event-type
|
|
:occurred-at occurred-at
|
|
:sats (:sats params)
|
|
:fee-sats (:fee_sats params)
|
|
:fiat-amount (:fiat_amount params)
|
|
:fiat-currency (:fiat_currency params)
|
|
:from-wallet-id (some-> (:from_wallet_id params) UUID/fromString)
|
|
:to-wallet-id (some-> (:to_wallet_id params) UUID/fromString)
|
|
:note (:note params)}]
|
|
(query-fn :insert-event! row)
|
|
(response/created "/api/events" {:status "ok"})))))
|
|
|
|
(defn get-deposit-totals [{:keys [query-fn]} _req]
|
|
(response/ok (query-fn :get-deposit-totals {})))
|
|
|
|
(defn list-events [{:keys [query-fn]} req]
|
|
(let [event-type (get-in req [:query-params "type"])]
|
|
(if event-type
|
|
(response/ok (query-fn :get-events-by-type {:event-type event-type}))
|
|
(response/ok (query-fn :get-all-events {})))))
|
|
|
|
(defn get-wallet-events [{:keys [query-fn]} req]
|
|
(let [id (UUID/fromString (get-in req [:path-params :id]))]
|
|
(response/ok (query-fn :get-events-by-wallet {:wallet-id id}))))
|