From 1c652f4b54cc7ac907dfd2a60da49e7c1557bb8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Salgado?= Date: Mon, 13 Sep 2021 20:16:29 +0100 Subject: [PATCH] feat: add list of passable tx error codes for customer volume calculation --- lib/customers.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/customers.js b/lib/customers.js index fc5caa21..4831bd8e 100644 --- a/lib/customers.js +++ b/lib/customers.js @@ -21,6 +21,8 @@ const NUM_RESULTS = 1000 const idPhotoCardBasedir = _.get('idPhotoCardDir', options) const frontCameraBaseDir = _.get('frontCameraDir', options) +const TX_PASSTHROUGH_ERROR_CODES = ['operatorCancel'] + /** * Add new customer * @@ -453,6 +455,7 @@ function batch () { * @returns {array} Array of customers with it's transactions aggregations */ function getCustomersList () { + const passableErrorCodes = _.map(Pgp.as.text, TX_PASSTHROUGH_ERROR_CODES).join(',') const sql = `select id, authorized_override, days_suspended, is_suspended, front_camera_path, front_camera_override, phone, sms_override, id_card_data, id_card_data_override, id_card_data_expiration, id_card_photo_path, id_card_photo_override, us_ssn, us_ssn_override, sanctions, sanctions_at, @@ -468,16 +471,16 @@ function getCustomersList () { c.sanctions_at, c.sanctions_override, t.tx_class, t.fiat, t.fiat_code, t.created, row_number() over (partition by c.id order by t.created desc) as rn, sum(case when t.id is not null then 1 else 0 end) over (partition by c.id) as total_txs, - coalesce(sum(case when error_code is distinct from 'operatorCancel' then t.fiat else 0 end) over (partition by c.id), 0) as total_spent + coalesce(sum(case when error_code is null or error_code not in ($1^) then t.fiat else 0 end) over (partition by c.id), 0) as total_spent from customers c left outer join ( select 'cashIn' as tx_class, id, fiat, fiat_code, created, customer_id, error_code from cash_in_txs where send_confirmed = true union select 'cashOut' as tx_class, id, fiat, fiat_code, created, customer_id, error_code from cash_out_txs where confirmed_at is not null) t on c.id = t.customer_id - where c.id != $1 + where c.id != $2 ) as cl where rn = 1 - limit $2` - return db.any(sql, [ anonymous.uuid, NUM_RESULTS ]) + limit $3` + return db.any(sql, [ passableErrorCodes, anonymous.uuid, NUM_RESULTS ]) .then(customers => Promise.all(_.map(customer => { return populateOverrideUsernames(customer) .then(camelize) @@ -492,6 +495,7 @@ function getCustomersList () { * @returns {array} Array of customers with it's transactions aggregations */ function getCustomerById (id) { + const passableErrorCodes = _.map(Pgp.as.text, TX_PASSTHROUGH_ERROR_CODES).join(',') const sql = `select id, authorized_override, days_suspended, is_suspended, front_camera_path, front_camera_override, phone, sms_override, id_card_data, id_card_data_override, id_card_data_expiration, id_card_photo_path, id_card_photo_override, us_ssn, us_ssn_override, sanctions, sanctions_at, @@ -507,15 +511,15 @@ function getCustomerById (id) { c.sanctions_at, c.sanctions_override, t.tx_class, t.fiat, t.fiat_code, t.created, row_number() over (partition by c.id order by t.created desc) as rn, sum(case when t.id is not null then 1 else 0 end) over (partition by c.id) as total_txs, - sum(case when error_code is distinct from 'operatorCancel' then t.fiat else 0 end) over (partition by c.id) as total_spent + sum(case when error_code is null or error_code not in ($1^) then t.fiat else 0 end) over (partition by c.id) as total_spent from customers c left outer join ( select 'cashIn' as tx_class, id, fiat, fiat_code, created, customer_id, error_code from cash_in_txs where send_confirmed = true union select 'cashOut' as tx_class, id, fiat, fiat_code, created, customer_id, error_code from cash_out_txs where confirmed_at is not null) t on c.id = t.customer_id - where c.id = $1 + where c.id = $2 ) as cl where rn = 1` - return db.oneOrNone(sql, [id]) + return db.oneOrNone(sql, [passableErrorCodes, id]) .then(populateOverrideUsernames) .then(camelize) }