merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit d954792130f48ad31e3428d968188eebadb1879f
parent f97dbdb7497e2d156f424321d283c209836f33bb
Author: Christian Grothoff <grothoff@gnunet.org>
Date:   Mon, 11 Aug 2025 12:58:33 +0200

combine donau schema changes with DB generation 22

Diffstat:
Msrc/backenddb/Makefile.am | 1-
Msrc/backenddb/merchant-0022.sql | 74++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dsrc/backenddb/merchant-0023.sql | 98-------------------------------------------------------------------------------
3 files changed, 74 insertions(+), 99 deletions(-)

diff --git a/src/backenddb/Makefile.am b/src/backenddb/Makefile.am @@ -39,7 +39,6 @@ sql_DATA = \ merchant-0020.sql \ merchant-0021.sql \ merchant-0022.sql \ - merchant-0023.sql \ drop.sql BUILT_SOURCES = \ diff --git a/src/backenddb/merchant-0022.sql b/src/backenddb/merchant-0022.sql @@ -17,6 +17,10 @@ -- @file merchant-0022.sql -- @brief Add phone number for merchant instances -- @author Christian Grothoff +-- +-- @brief Create table to store donau related information +-- @author Bohdan Potuzhnyi +-- @author Vlada Svirsh BEGIN; @@ -76,5 +80,75 @@ CREATE TRIGGER merchant_expected_transfers_on_update FOR EACH ROW EXECUTE FUNCTION merchant_expected_transfers_update_trigger(); +CREATE TABLE IF NOT EXISTS merchant_donau_keys +(donau_keys_serial BIGINT GENERATED BY DEFAULT AS IDENTITY UNIQUE + ,donau_url TEXT PRIMARY KEY + ,keys_json TEXT NOT NULL + ,first_retry INT8 NOT NULL DEFAULT (0) +); + +COMMENT ON TABLE merchant_donau_keys + IS 'Here we store the cached /keys response from Donau in JSON format'; +COMMENT ON COLUMN merchant_donau_keys.donau_keys_serial + IS 'Unique serial identifier for each cached key entry'; +COMMENT ON COLUMN merchant_donau_keys.donau_url + IS 'Base URL of Donau associated with these keys'; +COMMENT ON COLUMN merchant_donau_keys.keys_json + IS 'JSON string of the /keys as generated by Donau'; +COMMENT ON COLUMN merchant_donau_keys.first_retry + IS 'Absolute time when this merchant may retry to fetch the keys from this donau at the earliest'; + +CREATE TABLE IF NOT EXISTS merchant_donau_instances +(donau_instances_serial BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY + ,donau_url TEXT NOT NULL + ,charity_name TEXT NOT NULL + ,merchant_instance_serial INT8 NOT NULL + REFERENCES merchant_instances (merchant_serial) ON DELETE CASCADE + ,charity_id BIGINT NOT NULL + ,charity_max_per_year taler_amount_currency NOT NULL + ,charity_receipts_to_date taler_amount_currency NOT NULL + ,current_year INT8 NOT NULL +); + +COMMENT ON TABLE merchant_donau_instances + IS 'Here we store information about individual Donau instances, including details about associated charities and donation limits'; +COMMENT ON COLUMN merchant_donau_instances.donau_instances_serial + IS 'Unique serial identifier for each Donau instance'; +COMMENT ON COLUMN merchant_donau_instances.donau_url + IS 'The URL associated with the Donau system for this instance'; +COMMENT ON COLUMN merchant_donau_instances.merchant_instance_serial + IS 'The serial from merchant_instances whose public key is public key of the charity organization'; +COMMENT ON COLUMN merchant_donau_instances.charity_id + IS 'The unique identifier for the charity organization linked to this Donau instance'; +COMMENT ON COLUMN merchant_donau_instances.charity_max_per_year + IS 'Maximum allowable donation amount per year for the charity associated with this instance, stored in taler_amount_currency'; +COMMENT ON COLUMN merchant_donau_instances.charity_receipts_to_date + IS 'The total amount of donations received to date for this instance, stored in taler_amount_currency'; +COMMENT ON COLUMN merchant_donau_instances.current_year + IS 'The current year for tracking donations for this instance, stored as an 8-byte integer'; + +CREATE TABLE IF NOT EXISTS merchant_order_token_blinded_sigs +(order_token_bs_serial BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY + ,order_serial BIGINT NOT NULL + REFERENCES merchant_contract_terms (order_serial) ON DELETE CASCADE + ,token_index INT4 NOT NULL + ,token_blinded_signature BYTEA NOT NULL + ,token_hash BYTEA NOT NULL CHECK (LENGTH(token_hash)=64) + ,PRIMARY KEY (order_serial, token_index) +); + +COMMENT ON TABLE merchant_order_token_blinded_sigs + IS 'Table linking merchant orders with Donau BUDIS information'; +COMMENT ON COLUMN merchant_order_token_blinded_sigs.token_index + IS 'offset of the given signature in the output token array'; +COMMENT ON COLUMN merchant_order_token_blinded_sigs.order_token_bs_serial + IS 'Unique serial identifier for token order linkage'; +COMMENT ON COLUMN merchant_order_token_blinded_sigs.order_serial + IS 'Foreign key linking to the corresponding merchant order'; +COMMENT ON COLUMN merchant_order_token_blinded_sigs.token_blinded_signature + IS 'Blinded signature of the token associated with the order'; +COMMENT ON COLUMN merchant_order_token_blinded_sigs.token_hash + IS 'Hash of the token'; + COMMIT; diff --git a/src/backenddb/merchant-0023.sql b/src/backenddb/merchant-0023.sql @@ -1,98 +0,0 @@ --- --- This file is part of TALER --- Copyright (C) 2025 Taler Systems SA --- --- TALER is free software; you can redistribute it and/or modify it under the --- terms of the GNU General Public License as published by the Free Software --- Foundation; either version 3, or (at your option) any later version. --- --- TALER is distributed in the hope that it will be useful, but WITHOUT ANY --- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR --- A PARTICULAR PURPOSE. See the GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License along with --- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> --- - --- @file merchant-0023.sql --- @brief Create table to store donau related information --- @author Bohdan Potuzhnyi --- @author Vlada Svirsh - -BEGIN; - --- Check patch versioning is in place. -SELECT _v.register_patch('merchant-0023', NULL, NULL); - -SET search_path TO merchant; - -CREATE TABLE IF NOT EXISTS merchant_donau_keys -(donau_keys_serial BIGINT GENERATED BY DEFAULT AS IDENTITY UNIQUE - ,donau_url TEXT PRIMARY KEY - ,keys_json TEXT NOT NULL - ,first_retry INT8 NOT NULL DEFAULT (0) -); - -COMMENT ON TABLE merchant_donau_keys - IS 'Here we store the cached /keys response from Donau in JSON format'; -COMMENT ON COLUMN merchant_donau_keys.donau_keys_serial - IS 'Unique serial identifier for each cached key entry'; -COMMENT ON COLUMN merchant_donau_keys.donau_url - IS 'Base URL of Donau associated with these keys'; -COMMENT ON COLUMN merchant_donau_keys.keys_json - IS 'JSON string of the /keys as generated by Donau'; -COMMENT ON COLUMN merchant_donau_keys.first_retry - IS 'Absolute time when this merchant may retry to fetch the keys from this donau at the earliest'; - -CREATE TABLE IF NOT EXISTS merchant_donau_instances -(donau_instances_serial BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY - ,donau_url TEXT NOT NULL - ,charity_name TEXT NOT NULL - ,merchant_instance_serial INT8 NOT NULL - REFERENCES merchant_instances (merchant_serial) ON DELETE CASCADE - ,charity_id BIGINT NOT NULL - ,charity_max_per_year taler_amount_currency NOT NULL - ,charity_receipts_to_date taler_amount_currency NOT NULL - ,current_year INT8 NOT NULL -); - -COMMENT ON TABLE merchant_donau_instances - IS 'Here we store information about individual Donau instances, including details about associated charities and donation limits'; -COMMENT ON COLUMN merchant_donau_instances.donau_instances_serial - IS 'Unique serial identifier for each Donau instance'; -COMMENT ON COLUMN merchant_donau_instances.donau_url - IS 'The URL associated with the Donau system for this instance'; -COMMENT ON COLUMN merchant_donau_instances.merchant_instance_serial - IS 'The serial from merchant_instances whose public key is public key of the charity organization'; -COMMENT ON COLUMN merchant_donau_instances.charity_id - IS 'The unique identifier for the charity organization linked to this Donau instance'; -COMMENT ON COLUMN merchant_donau_instances.charity_max_per_year - IS 'Maximum allowable donation amount per year for the charity associated with this instance, stored in taler_amount_currency'; -COMMENT ON COLUMN merchant_donau_instances.charity_receipts_to_date - IS 'The total amount of donations received to date for this instance, stored in taler_amount_currency'; -COMMENT ON COLUMN merchant_donau_instances.current_year - IS 'The current year for tracking donations for this instance, stored as an 8-byte integer'; - -CREATE TABLE IF NOT EXISTS merchant_order_token_blinded_sigs -(order_token_bs_serial BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY - ,order_serial BIGINT NOT NULL - REFERENCES merchant_contract_terms (order_serial) ON DELETE CASCADE - ,token_index INT4 NOT NULL - ,token_blinded_signature BYTEA NOT NULL - ,token_hash BYTEA NOT NULL CHECK (LENGTH(token_hash)=64) - ,PRIMARY KEY (order_serial, token_index) -); - -COMMENT ON TABLE merchant_order_token_blinded_sigs - IS 'Table linking merchant orders with Donau BUDIS information'; -COMMENT ON COLUMN merchant_order_token_blinded_sigs.token_index - IS 'offset of the given signature in the output token array'; -COMMENT ON COLUMN merchant_order_token_blinded_sigs.order_token_bs_serial - IS 'Unique serial identifier for token order linkage'; -COMMENT ON COLUMN merchant_order_token_blinded_sigs.order_serial - IS 'Foreign key linking to the corresponding merchant order'; -COMMENT ON COLUMN merchant_order_token_blinded_sigs.token_blinded_signature - IS 'Blinded signature of the token associated with the order'; -COMMENT ON COLUMN merchant_order_token_blinded_sigs.token_hash - IS 'Hash of the token'; -COMMIT;