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 path = require('path')
const fs = require('fs') const fs = require('fs')
const util = require('util') const util = require('util')
const moment = require('moment')
const db = require('./db') const db = require('./db')
const BN = require('./bn') const BN = require('./bn')
@ -115,17 +117,32 @@ function getById (id, userToken) {
*/ */
function getDailyVolume (id) { function getDailyVolume (id) {
return Promise.all([ 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 where customer_id=$1
and created > now() - interval '1 day'`, [id]), 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 where customer_id=$1
and created > now() - interval '1 day'`, [id]) and created > now() - interval '1 day'`, [id])
]).then(([cashInTotal, cashOutTotal]) => { ]).then(([cashIn, cashOut]) => {
return BN(cashInTotal.total).add(cashOutTotal.total) 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 * Camelize customer fields
* Note: return null if customer is undefined * Note: return null if customer is undefined
@ -152,8 +169,9 @@ function camelize (customer) {
*/ */
function populateDailyVolume (customer) { function populateDailyVolume (customer) {
if (!customer) return if (!customer) return
return getDailyVolume(customer.id).then(dailyVolume => { return getDailyVolume(customer.id).then(({ dailyVolume, hoursTillLimitClear }) => {
return _.set('daily_volume', dailyVolume, customer) let withHours = _.set('hours_till_limit_clear', hoursTillLimitClear, customer)
return _.set('daily_volume', dailyVolume, withHours)
}) })
} }