@fabric-es/fabric-cqrs
Version:
Hyperledger Fabric middleware for event sourcing and cqrs pattern
41 lines • 2.29 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 utils_1 = require("../../../utils");
const action_1 = require("../../command/action");
const action_2 = require("../action");
const { RECONCILE, mergeCommitBatch, reconcileError, reconcileSuccess } = action_2.action;
exports.default = (action$, _, { logger }) => action$.pipe(redux_observable_1.ofType(RECONCILE), operators_1.map(({ payload }) => payload), operators_1.mergeMap(({ tx_id, args: { entityName }, store, channelEventHub, channelName, connectionProfile, wallet, }) => {
const promise = !entityName
? Promise.resolve(reconcileError({ tx_id, error: 'invalid input argument' }))
: utils_1.dispatcher((payload) => action_1.action.queryByEntityName(Object.assign(Object.assign({}, payload), { channelName,
connectionProfile,
wallet })), {
SuccessAction: action_1.action.QUERY_SUCCESS,
ErrorAction: action_1.action.QUERY_ERROR,
logger,
name: 'reconcile',
store,
slice: 'write',
})({ entityName, isPrivateData: false })
.then(({ data: commits }) => {
if (!commits || isEqual_1.default(commits, {}))
return reconcileSuccess({ tx_id, result: [] });
const keys = Object.keys(commits);
logger.debug(util_1.default.format('[store/reconcile.js] %s commits are retrieved from Fabric: %j', keys.length, keys));
return mergeCommitBatch({ tx_id, args: { entityName, commits }, store });
})
.catch((error) => {
logger.error(util_1.default.format('[store/reconcile.js] fail to %s: %j', action_1.action.QUERY_BY_ENTITY_NAME, error));
return reconcileError({ tx_id, error: error.message });
});
return rxjs_1.from(promise);
}));
//# sourceMappingURL=reconcileCommit.js.map