refactor: generalize accountProvisioned to cassettes&recyclers

This commit is contained in:
siiky 2023-10-23 10:58:54 +01:00
parent be63cd6ccb
commit 3accb2b54e

View file

@ -109,61 +109,41 @@ function plugins (settings, deviceId) {
return tx.fiat.lte(zeroConfLimit)
}
function computeAvailableCassettes (cassettes, redeemableTxs) {
if (_.isEmpty(redeemableTxs)) return cassettes
const accountProvisioned = (cassettes, tx) => {
const accountProvisioned = (cashUnitType, cashUnits, redeemableTxs) => {
const kons = (cashUnits, tx) => {
// cash-out-helper sends 0 as fallback value, need to filter it out as there are no '0' denominations
const cassettesBills = _.flow(
const cashUnitsBills = _.flow(
_.get(['bills']),
_.filter(it => _.includes('cassette', it.name) && it.denomination > 0)
_.zip(cassettes)
_.filter(it => _.includes(cashUnitType, it.name) && it.denomination > 0),
_.zip(cashUnits),
)(tx)
const sameDenominations = ([cassette, bill]) => cassette?.denomination === bill?.denomination
if (!_.every(sameDenominations, cassettesBills))
throw new Error('Denominations don\'t add up, cassettes were changed.')
const sameDenominations = ([cashUnit, bill]) => cashUnit?.denomination === bill?.denomination
if (!_.every(sameDenominations, cashUnitsBills))
throw new Error(`Denominations don't add up, ${cashUnitType}s were changed.`)
return _.map(
([cassette, { provisioned }]) => _.set('count', cassette.count - provisioned, cassette),
cassettesBills
([cashUnit, { provisioned }]) => _.set('count', cashUnit.count - provisioned, cashUnit),
cashUnitsBills
)
}
cassettes = _.reduce(accountProvisioned, cassettes, redeemableTxs)
return _.reduce(kons, cashUnits, redeemableTxs)
}
function computeAvailableCassettes (cassettes, redeemableTxs) {
if (_.isEmpty(redeemableTxs)) return cassettes
cassettes = accountProvisioned('cassette', cassettes, redeemableTxs)
if (_.some(({ count }) => count < 0, cassettes))
throw new Error('Negative note count: %j', counts)
return cassettes
}
function computeAvailableRecyclers (recyclers, redeemableTxs) {
if (_.isEmpty(redeemableTxs)) return recyclers
const accountProvisioned = (recyclers, tx) => {
// cash-out-helper sends 0 as fallback value, need to filter it out as there are no '0' denominations
const recyclersBills = _.flow(
_.get(['bills']),
_.filter(it => _.includes('recycler', it.name) && it.denomination > 0)
_.zip(recyclers)
)(tx)
const sameDenominations = ([recycler, bill]) => recycler?.denomination === bill?.denomination
if (!_.every(sameDenominations, recyclersBills))
throw new Error('Denominations don\'t add up, recyclers were changed.')
return _.map(
([recycler, { provisioned }]) => _.set('count', recycler.count - provisioned, recycler),
recyclersBills
)
}
recyclers = _.reduce(accountProvisioned, recyclers, redeemableTxs)
recyclers = accountProvisioned('recycler', recyclers, redeemableTxs)
if (_.some(({ count }) => count < 0, recyclers))
throw new Error('Negative note count: %j', counts)
return recyclers
}