feat: added the compliance/customers route

feat: added customers list page

feat: created the Customer type on the gql server and consume it

Currently only with the 'name' property

feat: added query on gql to get the customers list with the needed props

feat: added the currently available props to the front end table

fix: consider only sent txs for the aggregations on the customers list

fix: replace ExpTable with a non-expandable one

fix: remove unused properties from gql and front-end

fix: fixed the customers list columns width

fix: the last active table column was reading the wrong property

chore: remove debug logging

fix: use the correct table columns to check for txs that should be
considered on the customers list page

fix: use the international format for phone numbers

feat: added the search box

fix: remove ordering from the gql customers list query and moved it to
the front-end)

fix: removed the search box

chore: refactor the customers list table into a new component

chore: cleanup code

fix: fixed styles from customer list page header
This commit is contained in:
Liordino Neto 2020-02-06 20:36:56 -03:00 committed by Josh Harvey
parent 4320df2d61
commit 507027cdee
10 changed files with 327 additions and 4 deletions

View file

@ -377,6 +377,37 @@ function batch () {
}, customers)))
}
/**
* Query all customers, ordered by last activity
* and with aggregate columns based on their
* transactions
*
* @returns {array} Array of customers with it's
*/
function getCustomersList () {
const sql = `select name, phone, total_txs, total_spent,
created as last_active, fiat as last_tx_fiat, fiat_code as last_tx_fiat_code,
tx_class as last_tx_class
from (
select c.name, c.phone, t.tx_class, t.fiat, t.fiat_code, t.created,
row_number() over (partition by c.id order by t.created desc) as rn,
count(0) over (partition by c.id) as total_txs,
sum(t.fiat) over (partition by c.id) as total_spent
from customers c inner join (
select 'cashIn' as tx_class, id, fiat, fiat_code, created, customer_id
from cash_in_txs where send_confirmed = true union
select 'cashOut' as tx_class, id, fiat, fiat_code, created, customer_id
from cash_out_txs where confirmed_at is not null) t on c.id = t.customer_id
where c.id != $1
) as cl where rn = 1
limit $2`
return db.any(sql, [ anonymous.uuid, NUM_RESULTS ])
.then(customers => Promise.all(_.map(customer => {
return populateOverrideUsernames(customer)
.then(camelize)
}, customers)))
}
/**
* @param {String} id customer id
* @param {Object} patch customer update record
@ -482,4 +513,4 @@ function updateFrontCamera (id, patch) {
})
}
module.exports = { add, get, batch, getById, update, updatePhotoCard, updateFrontCamera }
module.exports = { add, get, batch, getCustomersList, getById, update, updatePhotoCard, updateFrontCamera }