const _ = require('lodash/fp') const pgp = require('pg-promise')() module.exports = {logDispense, logActionById, logAction, logError} function logDispense (t, tx) { const baseRec = {error: tx.error, error_code: tx.errorCode} const rec = _.merge(mapDispense(tx), baseRec) const action = _.isEmpty(tx.error) ? 'dispense' : 'dispenseError' return logAction(t, action, rec, tx) } function logActionById (t, action, _rec, txId) { const rec = _.assign(_rec, {action, tx_id: txId, redeem: false}) const sql = pgp.helpers.insert(rec, null, 'cash_out_actions') return t.none(sql) } function logAction (t, action, _rec, tx) { const rec = _.assign(_rec, {action, tx_id: tx.id, redeem: !!tx.redeem, device_id: tx.deviceId}) const sql = pgp.helpers.insert(rec, null, 'cash_out_actions') return t.none(sql) .then(_.constant(tx)) } function logError (t, action, err, tx) { return logAction(t, action, { error: err.message, error_code: err.name }, tx) } function mapDispense (tx) { const bills = tx.bills if (_.isEmpty(bills)) return {} const res = {} _.forEach(it => { const suffix = _.snakeCase(bills[it].name.replace(/cassette/gi, '')) res[`provisioned_${suffix}`] = bills[it].provisioned res[`denomination_${suffix}`] = bills[it].denomination res[`dispensed_${suffix}`] = bills[it].dispensed res[`rejected_${suffix}`] = bills[it].rejected }, _.times(_.identity(), _.size(bills))) return res }