[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-cashless2ecash] branch master updated: review: add fields and com
From: |
gnunet |
Subject: |
[taler-cashless2ecash] branch master updated: review: add fields and comments on sql |
Date: |
Tue, 12 Mar 2024 18:54:54 +0100 |
This is an automated email from the git hooks/post-receive script.
joel-haeberli pushed a commit to branch master
in repository cashless2ecash.
The following commit(s) were added to refs/heads/master by this push:
new b02fedd review: add fields and comments on sql
b02fedd is described below
commit b02fedd6450abefe883565c7205e55a3b8f2932f
Author: Joel-Haeberli <haebu@rubigen.ch>
AuthorDate: Tue Mar 12 18:54:41 2024 +0100
review: add fields and comments on sql
---
data/nonce2ecash_schema.sql | 110 +++++++++++++++++++++++++++---------
nonce2ecash/pkg/common/http-util.go | 31 ++++++----
2 files changed, 103 insertions(+), 38 deletions(-)
diff --git a/data/nonce2ecash_schema.sql b/data/nonce2ecash_schema.sql
index f34df8d..7a4f9a8 100644
--- a/data/nonce2ecash_schema.sql
+++ b/data/nonce2ecash_schema.sql
@@ -1,35 +1,93 @@
-DROP TABLE IF EXISTS withdrawal;
-DROP TABLE IF EXISTS terminal;
-DROP TABLE IF EXISTS terminal_provider;
-DROP TYPE WITHDRAWAL_OPERATION_STATUS;
+-- => proper versioning.sql nehmen (siehe exchange.git),
+DROP SCHEMA IF EXISTS nonce2ecash CASCADE;
-CREATE TYPE WITHDRAWAL_OPERATION_STATUS AS ENUM (
- 'pending',
- 'selected',
- 'aborted',
- 'confirmed'
+-- The schema nonce2ecash contains all
+CREATE SCHEMA nonce2ecash;
+
+-- The enumeration contains the states which a withdrawal can be in.
+-- The states are the same as in the bank-integration API:
+-- pending : the operation is pending parameters selection (exchange and
reserve public key)
+-- selected : the operations has been selected and is pending confirmation
+-- aborted : the operation has been aborted
+-- confirmed: the transfer has been confirmed and registered by the bank
+CREATE TYPE nonce2ecash.withdrawal_operation_status AS ENUM (
+ 'pending',
+ 'selected',
+ -- => bound? -> I wanted to stick to the same terms as the
bank-integration API
+ 'aborted',
+ 'confirmed'
);
-CREATE TABLE IF NOT EXISTS terminal_provider (
- id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
- name VARCHAR(50),
- remarks VARCHAR(255)
+-- copied from
https://git.taler.net/merchant.git/tree/src/backenddb/merchant-0001.sql
+CREATE TYPE nonce2ecash.taler_amount_currency
+ AS (val INT8, frac INT4 , curr VARCHAR(12));
+COMMENT ON TYPE nonce2ecash.taler_amount_currency
+ IS 'Stores an amount, fraction is in units of 1/100000000 of the base value';
+
+-- The terminal_provider table describes a specific provider of a
cashless2ecash
+-- terminal provider.
+CREATE TABLE IF NOT EXISTS nonce2ecash.terminal_provider (
+ -- Uniquely identifies a provider.
+ provider_terminal_id INT8 GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
+ -- Name of the provider. Must be unique, because used to choose the
process
+ -- proofing the transaction.
+ name TEXT NOT NULL UNIQUE,
+ -- The url of the providers backend, used to proof the transaction.
+ backend_base_url TEXT NOT NULL,
+ -- Credentials used to access the backend of the provider.
+ backend_credentials TEXT NOT NULL
);
-CREATE TABLE IF NOT EXISTS terminal (
- id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
- access_token BYTEA CHECK (LENGTH(access_token)=32),
- active BOOLEAN DEFAULT TRUE,
- remarks VARCHAR(255),
- provider_id BIGINT NOT NULL REFERENCES terminal_provider(id)
-)
+-- The terminal table contains information about terminals of providers.
+-- This includes the information if they are active (allowed to do
transactions)
+-- and their credentials.
+CREATE TABLE IF NOT EXISTS nonce2ecash.terminal (
+ -- Uniquely identifies a terminal.
+ terminal_id INT8 GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
+ -- The access token of the terminal. The access token is used to
+ -- authenticate against the nonce2ecash API.
+ access_token BYTEA CHECK (LENGTH(access_token)=32) NOT NULL,
+ -- A terminal may be deactivated. This MUST be checked at each request of
+ -- the terminal. This allows to immediately block any terminal from the
+ -- withdrawal process if necessary.
+ active BOOLEAN DEFAULT TRUE NOT NULL,
+ -- The description is thought to help humans to identify a terminal.
+ -- This may include the location and an identifier of the terminal.
+ description TEXT,
+ -- Each terminal belongs to a specific terminal provider. The terminal
+ -- provider indicates which process is used by nonce2ecash to proof a
+ -- transaction.
+ provider_id INT8 NOT NULL REFERENCES
terminal_provider(provider_terminal_id)
+);
-CREATE TABLE IF NOT EXISTS withdrawal (
+-- A withdrawal represents a withdrawal process initiated by one terminal.
+CREATE TABLE IF NOT EXISTS nonce2ecash.withdrawal (
+ -- The withdrawal id is a nonce generated by the terminal requesting a
+ -- withdrawal.
withdrawal_id BYTEA PRIMARY KEY CHECK (LENGTH(withdrawal_id)=32),
- reserve_pub_key BYTEA CHECK (LENGTH(reserve_pub_key)=32),
- registration_ts INT8,
- amount VARCHAR(50),
- withdrawal_status WITHDRAWAL_OPERATION_STATUS NOT NULL,
+ -- The reserve public key which will hold the amount of the withdrawal
+ -- after completion.
+ reserve_pub_key BYTEA CHECK (LENGTH(reserve_pub_key)=32) NOT NULL,
+ -- The timestamp, when the withdrawal request was initially issued.
+ registration_ts INT8 NOT NULL,
+ -- The amount of the withdrawal. This amount is the effective amount to be
+ -- put into the reserve. Fees are stored in the fees field.
+ amount nonce2ecash.taler_amount_currency NOT NULL,
+ -- The fees of the withdrawal. This includes the fees of the exchange and
the
+ -- fees of the provider.
+ fees nonce2ecash.taler_amount_currency NOT NULL,
+ -- The status of the withdrawal. Indicates in which step of the process
+ -- the withdrawal currently is.
+ withdrawal_status withdrawal_operation_status NOT NULL,
+ -- The terminal id indicates at which terminal the withdrawal was
initiated.
terminal_id BIGINT NOT NULL REFERENCES terminal(id)
+ -- Stores a transaction identifiers supplied by the provider which helps to
+ -- request information about it at the providers backend.
+ provider_transaction_id TEXT,
+ -- Timestamp allowing to remember when we asked last about this
transaction.
+ -- This helps us controlling retries.
+ last_retry_ts INT8,
+ -- stores proof of transaction upon final completion delivered by the
+ -- providers system
+ completion_proof BLOB
);
-
diff --git a/nonce2ecash/pkg/common/http-util.go
b/nonce2ecash/pkg/common/http-util.go
index fcdb950..3812d2a 100644
--- a/nonce2ecash/pkg/common/http-util.go
+++ b/nonce2ecash/pkg/common/http-util.go
@@ -43,19 +43,20 @@ func HttpPostOrError[T any, R any](
responseCodec Codec[R],
) (*R, int, error) {
- encodedBody, err := requestCodec.encode(body)
- if err != nil {
- return nil, -1, err
- }
-
var res *http.Response
if body == nil {
if requestCodec == nil {
- res, err = http.Post(
+ res, err := http.Post(
formatUrl(req, pathParams, queryParams),
"",
- encodedBody,
+ nil,
)
+
+ if err != nil {
+ return nil, -1, err
+ }
+
+ return nil, res.StatusCode, nil
} else {
return nil, -1, errors.New("invalid arguments - body
was not present but codec was defined")
}
@@ -63,20 +64,26 @@ func HttpPostOrError[T any, R any](
if requestCodec == nil {
return nil, -1, errors.New("invalid arguments - body
was present but no codec was defined")
} else {
+
+ encodedBody, err := requestCodec.encode(body)
+ if err != nil {
+ return nil, -1, err
+ }
+
res, err = http.Post(
formatUrl(req, pathParams, queryParams),
requestCodec.httpApplicationContentHeader(),
encodedBody,
)
- }
- }
- if err != nil {
- return nil, -1, err
+ if err != nil {
+ return nil, -1, err
+ }
+ }
}
if responseCodec == nil {
- return nil, res.StatusCode, err
+ return nil, res.StatusCode, nil
}
resBody, err := responseCodec.decode(res.Body)
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-cashless2ecash] branch master updated: review: add fields and comments on sql,
gnunet <=