lamassu-server/packages/server/lib/cash-out/cash-out-actions.js
2025-05-12 15:35:00 +01:00

63 lines
1.5 KiB
JavaScript

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
}