UNPKG

@fabric-es/fabric-cqrs

Version:

Hyperledger Fabric middleware for event sourcing and cqrs pattern

38 lines 2.02 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const util_1 = __importDefault(require("util")); const isEqual_1 = __importDefault(require("lodash/isEqual")); const redux_observable_1 = require("redux-observable"); const rxjs_1 = require("rxjs"); const operators_1 = require("rxjs/operators"); const action_1 = require("../action"); const { MERGE_ENTITY_BATCH, mergeEntityBatchError, mergeEntityBatchSuccess } = action_1.action; exports.default = (action$, _, { queryDatabase, reducers, logger, }) => action$.pipe(redux_observable_1.ofType(MERGE_ENTITY_BATCH), operators_1.map(({ payload }) => payload), operators_1.mergeMap(({ tx_id, args: { entityName, commits } }) => { let promise; let reducer; if (!commits || !entityName || !reducers) { promise = Promise.resolve(mergeEntityBatchError({ tx_id, error: `invalid input argument` })); } else if (isEqual_1.default(commits, {})) { promise = Promise.resolve(mergeEntityBatchSuccess({ tx_id, result: null })); } else { reducer = reducers[entityName]; promise = reducer ? queryDatabase .mergeEntityBatch({ entityName, commits, reducer }) .then(({ data, status, errors }) => status === 'OK' ? mergeEntityBatchSuccess({ tx_id, result: data }) : mergeEntityBatchError({ tx_id, error: errors })) .catch((error) => { logger.warn(util_1.default.format('[store/projection/mergeEntityBatch.js] fail to %s: %s, %j', MERGE_ENTITY_BATCH, entityName, error)); return mergeEntityBatchError({ tx_id, error }); }) : Promise.resolve(mergeEntityBatchError({ tx_id, error: `entityName ${entityName}: reducer not found` })); } return rxjs_1.from(promise); })); //# sourceMappingURL=mergeEntityBatch.js.map