libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit 18c5c88403d8b759cdff4a5e1c0da1d954b73803
parent 25804f0c84bd3e06554c199c89d8f5fb174f89be
Author: Antoine A <>
Date:   Fri, 27 Mar 2026 16:30:29 +0100

common: improve prepared transfer logic

Diffstat:
Mdatabase-versioning/libeufin-bank-procedures.sql | 8++++----
Mdatabase-versioning/libeufin-nexus-procedures.sql | 8+++-----
2 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/database-versioning/libeufin-bank-procedures.sql b/database-versioning/libeufin-bank-procedures.sql @@ -781,10 +781,10 @@ IF out_pending THEN INSERT INTO pending_recurrent_incoming_transactions (bank_transaction_id, debtor_account_id, authorization_pub) VALUES (out_credit_row_id, in_debtor_account_id, local_authorization_pub); ELSE - IF local_authorization_pub IS NOT NULL THEN - UPDATE prepared_transfers - SET bank_transaction_id = out_credit_row_id - WHERE authorization_pub = local_authorization_pub; + UPDATE prepared_transfers + SET bank_transaction_id = out_credit_row_id + WHERE (bank_transaction_id IS NULL AND account_pub = in_metadata) OR authorization_pub = local_authorization_pub; + IF local_withdrawal_uuid IS NOT NULL THEN PERFORM abort_taler_withdrawal(local_withdrawal_uuid); END IF; PERFORM register_incoming(out_credit_row_id, in_type, in_metadata, in_creditor_account_id, local_authorization_pub, local_authorization_sig); diff --git a/database-versioning/libeufin-nexus-procedures.sql b/database-versioning/libeufin-nexus-procedures.sql @@ -367,11 +367,9 @@ IF in_type IS NOT NULL AND NOT out_talerable AND out_bounce_id IS NULL THEN INSERT INTO pending_recurrent_incoming_transactions (incoming_transaction_id, authorization_pub) VALUES (out_tx_id, local_authorization_pub); ELSE - IF local_authorization_pub IS NOT NULL THEN - UPDATE prepared_transfers - SET incoming_transaction_id = out_tx_id - WHERE authorization_pub = local_authorization_pub; - END IF; + UPDATE prepared_transfers + SET incoming_transaction_id = out_tx_id + WHERE (incoming_transaction_id IS NULL AND account_pub = in_metadata) OR authorization_pub = local_authorization_pub; -- We cannot use ON CONFLICT here because conversion use a trigger before insertion that isn't idempotent INSERT INTO talerable_incoming_transactions ( incoming_transaction_id