libeufin

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

commit 766adfc1ecd6d1e07a8bb03e8a561e2dced38391
parent 9084386204326af2731765a50b32ade22495f756
Author: MS <ms@taler.net>
Date:   Sat, 22 Jul 2023 09:11:57 +0200

Nexus DB schema.

Grouping tables by purpose.

Diffstat:
Mdatabase-versioning/new/nexus-0001-refactor.sql | 214+++++++++++++++++++++++++++++++++++++++++++++----------------------------------
1 file changed, 121 insertions(+), 93 deletions(-)

diff --git a/database-versioning/new/nexus-0001-refactor.sql b/database-versioning/new/nexus-0001-refactor.sql @@ -5,6 +5,8 @@ BEGIN; SELECT _v.register_patch('nexus-0001', NULL, NULL); +-- start of: user management + CREATE TABLE IF NOT EXISTS NexusUsers (id BIGSERIAL PRIMARY KEY ,username TEXT NOT NULL @@ -12,6 +14,10 @@ CREATE TABLE IF NOT EXISTS NexusUsers ,superuser BOOLEAN NOT NULL ); +-- end of: user management + +-- start of: connection management + CREATE TABLE IF NOT EXISTS NexusBankConnections (id BIGSERIAL PRIMARY KEY ,"connectionId" TEXT NOT NULL @@ -21,6 +27,24 @@ CREATE TABLE IF NOT EXISTS NexusBankConnections ,CONSTRAINT fk_nexusbankconnections_user_id FOREIGN KEY ("user") REFERENCES NexusUsers(id) ON DELETE RESTRICT ON UPDATE RESTRICT ); +CREATE TABLE IF NOT EXISTS NexusEbicsSubscribers + (id BIGSERIAL PRIMARY KEY + ,"ebicsURL" TEXT NOT NULL + ,"hostID" TEXT NOT NULL + ,"partnerID" TEXT NOT NULL + ,"userID" TEXT NOT NULL + ,"systemID" TEXT NULL + ,"signaturePrivateKey" bytea NOT NULL + ,"encryptionPrivateKey" bytea NOT NULL + ,"authenticationPrivateKey" bytea NOT NULL + ,"bankEncryptionPublicKey" bytea NULL + ,"bankAuthenticationPublicKey" bytea NULL + ,"nexusBankConnection" BIGINT NOT NULL + ,"ebicsIniState" VARCHAR(16) NOT NULL + ,"ebicsHiaState" VARCHAR(16) NOT NULL + ,CONSTRAINT fk_nexusebicssubscribers_nexusbankconnection_id FOREIGN KEY ("nexusBankConnection") REFERENCES NexusBankConnections(id) ON DELETE RESTRICT ON UPDATE RESTRICT + ); + CREATE TABLE IF NOT EXISTS XLibeufinBankUsers (id BIGSERIAL PRIMARY KEY ,username TEXT NOT NULL @@ -30,6 +54,22 @@ CREATE TABLE IF NOT EXISTS XLibeufinBankUsers ,CONSTRAINT fk_xlibeufinbankusers_nexusbankconnection_id FOREIGN KEY ("nexusBankConnection") REFERENCES NexusBankConnections(id) ON DELETE RESTRICT ON UPDATE RESTRICT ); +CREATE TABLE IF NOT EXISTS OfferedBankAccounts + (id BIGSERIAL PRIMARY KEY + ,"offeredAccountId" TEXT NOT NULL + ,"bankConnection" BIGINT NOT NULL + ,iban TEXT NOT NULL + ,"bankCode" TEXT NOT NULL + ,"holderName" TEXT NOT NULL + ,imported BIGINT NULL + ,CONSTRAINT fk_offeredbankaccounts_bankconnection_id FOREIGN KEY ("bankConnection") REFERENCES nexusbankconnections(id) ON DELETE RESTRICT ON UPDATE RESTRICT + ,CONSTRAINT fk_offeredbankaccounts_imported_id FOREIGN KEY (imported) REFERENCES NexusBankAccounts(id) ON DELETE RESTRICT ON UPDATE RESTRICT + ); + +-- end of: connection management + +-- start of: background tasks + CREATE TABLE IF NOT EXISTS NexusScheduledTasks (id BIGSERIAL PRIMARY KEY ,"resourceType" TEXT NOT NULL @@ -42,6 +82,84 @@ CREATE TABLE IF NOT EXISTS NexusScheduledTasks ,"lastScheduledExecutionSec" BIGINT NULL ); +-- end of: background tasks + +-- start of: facades management + +CREATE TABLE IF NOT EXISTS FacadeState + (id BIGSERIAL PRIMARY KEY + ,"bankAccount" TEXT NOT NULL + ,"bankConnection" TEXT NOT NULL + ,currency TEXT NOT NULL + ,"reserveTransferLevel" TEXT NOT NULL + ,facade BIGINT NOT NULL + ,"highestSeenMessageSerialId" BIGINT DEFAULT 0 NOT NULL + ,CONSTRAINT fk_facadestate_facade_id FOREIGN KEY (facade) REFERENCES facades(id) ON DELETE CASCADE ON UPDATE RESTRICT + ); + +CREATE TABLE IF NOT EXISTS facades + (id BIGSERIAL PRIMARY KEY + ,"facadeName" TEXT NOT NULL UNIQUE + ,"type" TEXT NOT NULL + ,creator BIGINT NOT NULL + ,CONSTRAINT fk_facades_creator_id FOREIGN KEY (creator) REFERENCES NexusUsers(id) ON DELETE RESTRICT ON UPDATE RESTRICT + ); + +CREATE TABLE IF NOT EXISTS NexusPermissions + (id BIGSERIAL PRIMARY KEY + ,"resourceType" TEXT NOT NULL + ,"resourceId" TEXT NOT NULL + ,"subjectType" TEXT NOT NULL + ,"subjectName" TEXT NOT NULL + ,"permissionName" TEXT NOT NULL + ); + +-- end of: general facades management + +-- start of: Taler facade management + +CREATE TABLE IF NOT EXISTS TalerIncomingPayments + (id BIGSERIAL PRIMARY KEY + ,payment NOT NULL REFERENCES NexusBankTransactions(id) ON DELETE RESTRICT ON UPDATE RESTRICT + ,"reservePublicKey" TEXT NOT NULL + ,"timestampMs" BIGINT NOT NULL + ,"incomingPaytoUri" TEXT NOT NULL + ); + +CREATE TABLE IF NOT EXISTS TalerRequestedPayments + (id BIGSERIAL PRIMARY KEY + ,facade NOT NULL REFERENCES facades(id) ON DELETE RESTRICT ON UPDATE RESTRICT + ,payment NOT NULL REFERENCES PaymentInitiations(id) ON DELETE RESTRICT ON UPDATE RESTRICT + ,"requestUid" TEXT NOT NULL + ,amount TEXT NOT NULL + ,"exchangeBaseUrl" TEXT NOT NULL + ,wtid TEXT NOT NULL + ,"creditAccount" TEXT NOT NULL + ); + +CREATE TABLE IF NOT EXISTS TalerInvalidIncomingPayments + (id BIGSERIAL PRIMARY KEY + ,payment NOT NULL REFERENCES NexusBankTransactions(id) ON DELETE RESTRICT ON UPDATE RESTRICT + ,"timestampMs" BIGINT NOT NULL + ,refunded BOOLEAN DEFAULT false NOT NULL + ); + +-- end of: Taler facade management + +-- start of: Anastasis facade management + +CREATE TABLE IF NOT EXISTS AnastasisIncomingPayments + (id BIGSERIAL PRIMARY KEY + ,payment NOT NULL REFERENCES NexusBankTransactions(id) ON DELETE RESTRICT ON UPDATE RESTRICT + ,subject TEXT NOT NULL + ,"timestampMs" BIGINT NOT NULL + ,"incomingPaytoUri" TEXT NOT NULL + ); + +-- end of: Anastasis facade management + +-- start of: core banking + CREATE TABLE IF NOT EXISTS NexusBankAccounts (id BIGSERIAL PRIMARY KEY ,"bankAccountId" TEXT NOT NULL UNIQUE @@ -89,25 +207,7 @@ CREATE TABLE IF NOT EXISTS PaymentInitiations ,"rawConfirmation" BIGINT NULL REFERENCES NexusBankTransactions(id) ON DELETE RESTRICT ON UPDATE RESTRICT ); -CREATE TABLE IF NOT EXISTS NexusEbicsSubscribers - (id BIGSERIAL PRIMARY KEY - ,"ebicsURL" TEXT NOT NULL - ,"hostID" TEXT NOT NULL - ,"partnerID" TEXT NOT NULL - ,"userID" TEXT NOT NULL - ,"systemID" TEXT NULL - ,"signaturePrivateKey" bytea NOT NULL - ,"encryptionPrivateKey" bytea NOT NULL - ,"authenticationPrivateKey" bytea NOT NULL - ,"bankEncryptionPublicKey" bytea NULL - ,"bankAuthenticationPublicKey" bytea NULL - ,"nexusBankConnection" BIGINT NOT NULL - ,"ebicsIniState" VARCHAR(16) NOT NULL - ,"ebicsHiaState" VARCHAR(16) NOT NULL - ,CONSTRAINT fk_nexusebicssubscribers_nexusbankconnection_id FOREIGN KEY ("nexusBankConnection") REFERENCES NexusBankConnections(id) ON DELETE RESTRICT ON UPDATE RESTRICT - ); - -CREATE TABLE IF NOT EXISTS NexusBankBalances +CREATE TABLE IF NOT EXISTS NexusBankBalances -- table never used (id BIGSERIAL PRIMARY KEY ,balance TEXT NOT NULL ,"creditDebitIndicator" TEXT NOT NULL @@ -116,59 +216,6 @@ CREATE TABLE IF NOT EXISTS NexusBankBalances ,CONSTRAINT fk_nexusbankbalances_bankaccount_id FOREIGN KEY ("bankAccount") REFERENCES NexusBankAccounts(id) ON DELETE RESTRICT ON UPDATE RESTRICT ); -CREATE TABLE IF NOT EXISTS AnastasisIncomingPayments - (id BIGSERIAL PRIMARY KEY - ,payment NOT NULL REFERENCES NexusBankTransactions(id) ON DELETE RESTRICT ON UPDATE RESTRICT - ,subject TEXT NOT NULL - ,"timestampMs" BIGINT NOT NULL - ,"incomingPaytoUri" TEXT NOT NULL - ); - -CREATE TABLE IF NOT EXISTS TalerIncomingPayments - (id BIGSERIAL PRIMARY KEY - ,payment NOT NULL REFERENCES NexusBankTransactions(id) ON DELETE RESTRICT ON UPDATE RESTRICT - ,"reservePublicKey" TEXT NOT NULL - ,"timestampMs" BIGINT NOT NULL - ,"incomingPaytoUri" TEXT NOT NULL - ); - -CREATE TABLE IF NOT EXISTS facades - (id BIGSERIAL PRIMARY KEY - ,"facadeName" TEXT NOT NULL UNIQUE - ,"type" TEXT NOT NULL - ,creator BIGINT NOT NULL - ,CONSTRAINT fk_facades_creator_id FOREIGN KEY (creator) REFERENCES NexusUsers(id) ON DELETE RESTRICT ON UPDATE RESTRICT - ); - -CREATE TABLE IF NOT EXISTS TalerRequestedPayments - (id BIGSERIAL PRIMARY KEY - ,facade NOT NULL REFERENCES facades(id) ON DELETE RESTRICT ON UPDATE RESTRICT - ,payment NOT NULL REFERENCES PaymentInitiations(id) ON DELETE RESTRICT ON UPDATE RESTRICT - ,"requestUid" TEXT NOT NULL - ,amount TEXT NOT NULL - ,"exchangeBaseUrl" TEXT NOT NULL - ,wtid TEXT NOT NULL - ,"creditAccount" TEXT NOT NULL - ); - -CREATE TABLE IF NOT EXISTS FacadeState - (id BIGSERIAL PRIMARY KEY - ,"bankAccount" TEXT NOT NULL - ,"bankConnection" TEXT NOT NULL - ,currency TEXT NOT NULL - ,"reserveTransferLevel" TEXT NOT NULL - ,facade BIGINT NOT NULL - ,"highestSeenMessageSerialId" BIGINT DEFAULT 0 NOT NULL - ,CONSTRAINT fk_facadestate_facade_id FOREIGN KEY (facade) REFERENCES facades(id) ON DELETE CASCADE ON UPDATE RESTRICT - ); - -CREATE TABLE IF NOT EXISTS TalerInvalidIncomingPayments - (id BIGSERIAL PRIMARY KEY - ,payment NOT NULL REFERENCES NexusBankTransactions(id) ON DELETE RESTRICT ON UPDATE RESTRICT - ,"timestampMs" BIGINT NOT NULL - ,refunded BOOLEAN DEFAULT false NOT NULL - ); - CREATE TABLE IF NOT EXISTS NexusBankMessages (id BIGSERIAL PRIMARY KEY ,"bankConnection" BIGINT NOT NULL @@ -179,31 +226,12 @@ CREATE TABLE IF NOT EXISTS NexusBankMessages ,CONSTRAINT fk_nexusbankmessages_bankconnection_id FOREIGN KEY ("bankConnection") REFERENCES NexusBankConnections(id) ON DELETE RESTRICT ON UPDATE RESTRICT ); -CREATE TABLE IF NOT EXISTS OfferedBankAccounts - (id BIGSERIAL PRIMARY KEY - ,"offeredAccountId" TEXT NOT NULL - ,"bankConnection" BIGINT NOT NULL - ,iban TEXT NOT NULL - ,"bankCode" TEXT NOT NULL - ,"holderName" TEXT NOT NULL - ,imported BIGINT NULL - ,CONSTRAINT fk_offeredbankaccounts_bankconnection_id FOREIGN KEY ("bankConnection") REFERENCES nexusbankconnections(id) ON DELETE RESTRICT ON UPDATE RESTRICT - ,CONSTRAINT fk_offeredbankaccounts_imported_id FOREIGN KEY (imported) REFERENCES NexusBankAccounts(id) ON DELETE RESTRICT ON UPDATE RESTRICT - ); - ALTER TABLE OfferedBankAccounts ADD CONSTRAINT offeredbankaccounts_offeredaccountid_bankconnection_unique UNIQUE ("offeredAccountId", "bankConnection"); -CREATE TABLE IF NOT EXISTS NexusPermissions - (id BIGSERIAL PRIMARY KEY - ,"resourceType" TEXT NOT NULL - ,"resourceId" TEXT NOT NULL - ,"subjectType" TEXT NOT NULL - ,"subjectName" TEXT NOT NULL - ,"permissionName" TEXT NOT NULL - ); - ALTER TABLE NexusPermissions ADD CONSTRAINT nexuspermissions_resourcetype_resourceid_subjecttype_subjectnam UNIQUE ("resourceType", "resourceId", "subjectType", "subjectName", "permissionName"); +-- end of: core banking + COMMIT