diff --git a/migrations/0005_user-to-platform_contact-to-platform_device-to-instrument_platform.sql b/migrations/0005_user-to-platform_contact-to-platform_device-to-instrument_platform.sql index cc1036fa..d3bc9927 100644 --- a/migrations/0005_user-to-platform_contact-to-platform_device-to-instrument_platform.sql +++ b/migrations/0005_user-to-platform_contact-to-platform_device-to-instrument_platform.sql @@ -40,10 +40,10 @@ ALTER TABLE platform DROP COLUMN IF EXISTS api_key, DROP COLUMN IF EXISTS authentication, ADD COLUMN activated_at TIMESTAMP WITH TIME ZONE DEFAULT NULL, -- for activating prod users - ADD COLUMN name TEXT NOT NULL, + ADD COLUMN name TEXT NOT NULL DEFAULT '', ADD COLUMN description TEXT DEFAULT '', - ADD COLUMN domains TEXT[] DEFAULT NULL, -- define which domains can make calls to API (web-to-API) - ADD COLUMN ip_addresses TEXT[] DEFAULT NULL; -- define which API ips can make calls (API-to-API) + ADD COLUMN domains TEXT[] DEFAULT '{}'::TEXT[], -- define which domains can make calls to API (web-to-API) + ADD COLUMN ip_addresses TEXT[] DEFAULT '{}'::TEXT[]; -- define which API ips can make calls (API-to-API) ------------------------------------------------------------------------- -- TRANSACTION ------------------------------------------------------------- diff --git a/migrations/0006_platform-member_member-to-platform_member-role_member-to-role_member-invite_apikey.sql b/migrations/0006_platform-member_member-to-platform_member-role_member-to-role_member-invite_apikey.sql index 8cc24d81..e340d880 100644 --- a/migrations/0006_platform-member_member-to-platform_member-role_member-to-role_member-invite_apikey.sql +++ b/migrations/0006_platform-member_member-to-platform_member-role_member-to-role_member-invite_apikey.sql @@ -66,7 +66,7 @@ CREATE TABLE apikey ( deactivated_at TIMESTAMP WITH TIME ZONE DEFAULT NULL, type TEXT NOT NULL, -- [public,private] for now all public? data TEXT NOT NULL, -- the key itself - description TEXT DEFAULT NULL, + description TEXT DEFAULT '', created_by UUID REFERENCES platform_member (id), platform_id UUID REFERENCES platform (id) ); diff --git a/pkg/service/transaction.go b/pkg/service/transaction.go index d4152ee1..d24be8ab 100644 --- a/pkg/service/transaction.go +++ b/pkg/service/transaction.go @@ -350,7 +350,29 @@ func (t transaction) safetyCheck(p transactionProcessingData) (transactionProces } // Validate Transaction through Real Time Rules engine - err = t.unit21Evaluate(p.transactionModel.ID) + // RTR is not released for Unit21 Production (slated for Late February 2023) + evaluation, err := t.unit21Evaluate(p.transactionModel.ID) + if err != nil { + // If Unit21 Evaluate fails, just log, but otherwise continue with the transaction + log.Printf("Error evaluating transaction in Unit21: %s", common.StringError(err)) + return p, nil // NOTE: intentionally returning nil here in order to continue the transaction + } + + if !evaluation { + err = t.updateTransactionStatus("Failed", p.transactionModel.ID) + if err != nil { + return p, common.StringError(err) + } + + err = t.unit21CreateTransaction(p.transactionModel.ID) + if err != nil { + return p, common.StringError(err) + } + + return p, common.StringError(errors.New("risk: Transaction Failed Unit21 Real Time Rules Evaluation")) + } + + err = t.updateTransactionStatus("Unit21 Authorized", p.transactionModel.ID) if err != nil { return p, common.StringError(err) } @@ -807,12 +829,12 @@ func (t transaction) unit21CreateTransaction(transactionId string) (err error) { return nil } -func (t transaction) unit21Evaluate(transactionId string) (err error) { +func (t transaction) unit21Evaluate(transactionId string) (evaluation bool, err error) { //Check transaction in Unit21 txModel, err := t.repos.Transaction.GetById(transactionId) if err != nil { log.Printf("Error getting tx model in Unit21 in Tx Evaluate: %s", common.StringError(err)) - return common.StringError(err) + return evaluation, common.StringError(err) } u21Repo := unit21.TransactionRepo{ @@ -822,31 +844,7 @@ func (t transaction) unit21Evaluate(transactionId string) (err error) { } u21Tx := unit21.NewTransaction(u21Repo) - evaluation, err := u21Tx.Evaluate(txModel) - if err != nil { - log.Printf("Error evaluating transaction in Unit21: %s", common.StringError(err)) - return common.StringError(err) - } - - if !evaluation { - err = t.updateTransactionStatus("Failed", transactionId) - if err != nil { - return common.StringError(err) - } - - err = t.unit21CreateTransaction(transactionId) - if err != nil { - return common.StringError(err) - } - - return common.StringError(errors.New("risk: Transaction Failed Unit21 Real Time Rules Evaluation")) - } - err = t.updateTransactionStatus("Unit21 Authorized", transactionId) - if err != nil { - return common.StringError(err) - } - - return nil + return u21Tx.Evaluate(txModel) } func (t transaction) updateTransactionStatus(status string, transactionId string) (err error) {