From 96d12f170bacda282d84e73924af003023b65ce6 Mon Sep 17 00:00:00 2001 From: Per Magnus Petersen Date: Sun, 8 Mar 2026 16:04:24 +0100 Subject: [PATCH] Change events.occurred_at from TIMESTAMPTZ to DATE Make date required, remove default. Simplifies date handling throughout the controller. Co-Authored-By: Claude Opus 4.6 --- .../20260308200000-events-occurred-at-date.down.sql | 5 +++++ .../20260308200000-events-occurred-at-date.up.sql | 5 +++++ .../btcdata/web/controllers/transactions.clj | 13 ++++++------- 3 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 resources/migrations/20260308200000-events-occurred-at-date.down.sql create mode 100644 resources/migrations/20260308200000-events-occurred-at-date.up.sql diff --git a/resources/migrations/20260308200000-events-occurred-at-date.down.sql b/resources/migrations/20260308200000-events-occurred-at-date.down.sql new file mode 100644 index 0000000..c7824f0 --- /dev/null +++ b/resources/migrations/20260308200000-events-occurred-at-date.down.sql @@ -0,0 +1,5 @@ +ALTER TABLE deposits ALTER COLUMN occurred_at TYPE TIMESTAMPTZ USING occurred_at::timestamptz; +--;; +ALTER TABLE events ALTER COLUMN occurred_at SET DEFAULT NOW(); +--;; +ALTER TABLE events ALTER COLUMN occurred_at TYPE TIMESTAMPTZ USING occurred_at::timestamptz; diff --git a/resources/migrations/20260308200000-events-occurred-at-date.up.sql b/resources/migrations/20260308200000-events-occurred-at-date.up.sql new file mode 100644 index 0000000..b0b99fb --- /dev/null +++ b/resources/migrations/20260308200000-events-occurred-at-date.up.sql @@ -0,0 +1,5 @@ +ALTER TABLE events ALTER COLUMN occurred_at TYPE DATE USING occurred_at::date; +--;; +ALTER TABLE events ALTER COLUMN occurred_at DROP DEFAULT; +--;; +ALTER TABLE deposits ALTER COLUMN occurred_at TYPE DATE USING occurred_at::date; diff --git a/src/clj/pmagnus/btcdata/web/controllers/transactions.clj b/src/clj/pmagnus/btcdata/web/controllers/transactions.clj index 4f41d66..f9a5f4c 100644 --- a/src/clj/pmagnus/btcdata/web/controllers/transactions.clj +++ b/src/clj/pmagnus/btcdata/web/controllers/transactions.clj @@ -5,7 +5,7 @@ [pmagnus.btcdata.frankfurter.rates :as rates] [ring.util.http-response :as response]) (:import - [java.time Instant LocalDate ZoneOffset] + [java.time LocalDate] [java.util UUID])) (defn list-wallets [{:keys [query-fn]} req] @@ -51,11 +51,10 @@ (try (let [wallet (query-fn :get-wallet-by-id {:id to-wallet-id}) exchange (or (:name wallet) "Unknown") - date (.toLocalDate (.atOffset occurred-at ZoneOffset/UTC)) - rates (or (query-fn :get-currency-rates-by-date {:rate-date date}) + rates (or (query-fn :get-currency-rates-by-date {:rate-date occurred-at}) (rates/fetch-and-persist-for-date! (:client frankfurter) (:url frankfurter) - query-fn date)) + query-fn occurred-at)) amounts (if rates (convert-amount fiat-amount fiat-currency rates) {:amount-eur nil :amount-dkk nil :amount-usd nil})] @@ -75,9 +74,9 @@ 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)) + (let [occurred-at (if-let [d (:occurred_at params)] + (LocalDate/parse d) + (LocalDate/now)) row {:event-type event-type :occurred-at occurred-at :sats (:sats params)