Fetch time till hardLimit clears (#265)

* Fetch time till hardLimit clears

* Default to zero in case of negative numbers
This commit is contained in:
Rafael Taranto 2019-03-31 11:56:13 -03:00 committed by Josh Harvey
parent d2f36b8019
commit 8593918f3f

View file

@ -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)
})
}