refactor: generalize accountProvisioned to cassettes&recyclers
This commit is contained in:
parent
be63cd6ccb
commit
3accb2b54e
1 changed files with 16 additions and 36 deletions
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue