From be63cd6ccbd519f590e09713aea649f2361edb33 Mon Sep 17 00:00:00 2001 From: siiky Date: Mon, 23 Oct 2023 10:51:03 +0100 Subject: [PATCH] refactor: simplify `computeAvailableCassettes` similarly to `computeAvailableRecyclers` --- lib/plugins.js | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/lib/plugins.js b/lib/plugins.js index a882ffbd..8c849a79 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -112,38 +112,30 @@ function plugins (settings, deviceId) { function computeAvailableCassettes (cassettes, redeemableTxs) { if (_.isEmpty(redeemableTxs)) return cassettes - const sumTxs = (sum, tx) => { + const accountProvisioned = (cassettes, tx) => { // cash-out-helper sends 0 as fallback value, need to filter it out as there are no '0' denominations - const bills = _.filter(it => _.includes('cassette', it.name) && it.denomination > 0, tx.bills) - const sameDenominations = a => a[0]?.denomination === a[1]?.denomination + const cassettesBills = _.flow( + _.get(['bills']), + _.filter(it => _.includes('cassette', it.name) && it.denomination > 0) + _.zip(cassettes) + )(tx) - const doDenominationsMatch = _.every(sameDenominations, _.zip(cassettes, bills)) - - if (!doDenominationsMatch) { + const sameDenominations = ([cassette, bill]) => cassette?.denomination === bill?.denomination + if (!_.every(sameDenominations, cassettesBills)) throw new Error('Denominations don\'t add up, cassettes were changed.') - } - return _.map(r => r[0] + r[1].provisioned, _.zip(sum, tx.bills)) + return _.map( + ([cassette, { provisioned }]) => _.set('count', cassette.count - provisioned, cassette), + cassettesBills + ) } - const provisioned = _.reduce(sumTxs, _.times(_.constant(0), _.size(cassettes)), redeemableTxs) - const zipped = _.zip(_.map('count', cassettes), provisioned) - const counts = _.map(r => r[0] - r[1], zipped) + cassettes = _.reduce(accountProvisioned, cassettes, redeemableTxs) - if (_.some(_.lt(_, 0), counts)) { + if (_.some(({ count }) => count < 0, cassettes)) throw new Error('Negative note count: %j', counts) - } - const computedCassettes = [] - _.forEach(it => { - computedCassettes.push({ - name: cassettes[it].name, - denomination: cassettes[it].denomination, - count: counts[it] - }) - }, _.times(_.identity(), _.size(cassettes))) - - return computedCassettes + return cassettes } function computeAvailableRecyclers (recyclers, redeemableTxs) {