@fabric-es/fabric-cqrs
Version:
Hyperledger Fabric middleware for event sourcing and cqrs pattern
38 lines • 2.02 kB
JavaScript
;
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