diff --git a/lib/customers.js b/lib/customers.js index 15307015..59fc08c4 100644 --- a/lib/customers.js +++ b/lib/customers.js @@ -6,6 +6,8 @@ const makeDir = require('make-dir') const path = require('path') const fs = require('fs') const util = require('util') +const moment = require('moment') + const db = require('./db') const BN = require('./bn') @@ -115,17 +117,32 @@ function getById (id, userToken) { */ function getDailyVolume (id) { return Promise.all([ - db.one(`select coalesce(sum(fiat), 0) as total from cash_in_txs + db.one(`select coalesce(sum(fiat), 0) as total, max(created) as maxdate from cash_in_txs where customer_id=$1 and created > now() - interval '1 day'`, [id]), - db.one(`select coalesce(sum(fiat), 0) as total from cash_out_txs + db.one(`select coalesce(sum(fiat), 0) as total, max(created) as maxdate from cash_out_txs where customer_id=$1 and created > now() - interval '1 day'`, [id]) - ]).then(([cashInTotal, cashOutTotal]) => { - return BN(cashInTotal.total).add(cashOutTotal.total) + ]).then(([cashIn, cashOut]) => { + const dailyVolume = BN(cashIn.total).add(cashOut.total) + const hoursTillLimitClear = getHoursTillLimitClear(cashIn.maxdate, cashOut.maxdate) + return { dailyVolume, hoursTillLimitClear } }) } +function getHoursTillLimitClear (cashInDate, cashOutDate) { + let startDate = moment() + startDate = startDate.subtract(1, 'days') + + const cashInMoment = moment(cashInDate || startDate) + const cashOutMoment = moment(cashOutDate || startDate) + + const cashInDuration = moment.duration(cashInMoment.diff(startDate)).asHours() + const cashOutDuration = moment.duration(cashOutMoment.diff(startDate)).asHours() + + return _.ceil(_.max([cashInDuration, cashOutDuration, 0])) +} + /** * Camelize customer fields * Note: return null if customer is undefined @@ -152,8 +169,9 @@ function camelize (customer) { */ function populateDailyVolume (customer) { if (!customer) return - return getDailyVolume(customer.id).then(dailyVolume => { - return _.set('daily_volume', dailyVolume, customer) + return getDailyVolume(customer.id).then(({ dailyVolume, hoursTillLimitClear }) => { + let withHours = _.set('hours_till_limit_clear', hoursTillLimitClear, customer) + return _.set('daily_volume', dailyVolume, withHours) }) }