UNPKG

@fabric-es/fabric-cqrs

Version:

Hyperledger Fabric middleware for event sourcing and cqrs pattern

128 lines 5.47 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMockRepository = void 0; const did_jwt_1 = __importDefault(require("did-jwt")); const filter_1 = __importDefault(require("lodash/filter")); const omit_1 = __importDefault(require("lodash/omit")); const values_1 = __importDefault(require("lodash/values")); const utils_1 = require("../store/utils"); const utils_2 = require("../utils"); const getHistory = (commits) => { const result = []; commits.forEach(({ events }) => events.forEach((item) => result.push(item))); return result; }; const getEntities = ({ mockdb, entityName, reducer }) => values_1.default(values_1.default(filter_1.default(values_1.default(mockdb), { entityName })).reduce((commit, { entityId, events }) => { commit[entityId] = commit[entityId] || []; events.forEach((item) => commit[entityId].push(item)); return commit; }, {})).map((events) => reducer(events)); const getMockRepository = (mockdb, entityName, reducer) => ({ create: ({ id, enrollmentId }) => ({ save: ({ events, signedRequest }) => { var _a; let commit; if (signedRequest && signedRequest !== '') { const decoded = did_jwt_1.default.decodeJWT(signedRequest); const decodedEvents = (_a = decoded === null || decoded === void 0 ? void 0 : decoded.payload) === null || _a === void 0 ? void 0 : _a.events; if (decodedEvents && utils_2.isBaseEventArray(decodedEvents)) { commit = utils_1.createCommit({ id, entityName, version: 0, events: decodedEvents, signedRequest, }); } else return Promise.reject(new Error('fail to parse events')); } else { commit = utils_1.createCommit({ id, entityName, version: 0, events, signedRequest: '', }); } mockdb[commit.commitId] = commit; return new Promise((resolve) => setTimeout(() => resolve({ status: 'OK', data: omit_1.default(commit, 'events', 'signedRequest'), }), 50)); }, }), getById: ({ id, enrollmentId }) => new Promise((resolve) => { const matched = filter_1.default(values_1.default(mockdb), ({ entityId }) => entityId === id); const matchEvents = getHistory(matched); setTimeout(() => resolve({ currentState: reducer(matchEvents), save: ({ events, signedRequest }) => { var _a; let commit; if (signedRequest && signedRequest !== '') { const decoded = did_jwt_1.default.decodeJWT(signedRequest); const decodedEvents = (_a = decoded === null || decoded === void 0 ? void 0 : decoded.payload) === null || _a === void 0 ? void 0 : _a.events; if (decodedEvents && utils_2.isBaseEventArray(decodedEvents)) { commit = utils_1.createCommit({ id, entityName, version: matched.length, events: decodedEvents, signedRequest, }); } else return Promise.reject(new Error('fail to parse events')); } else { commit = utils_1.createCommit({ id, entityName, version: matched.length, events, signedRequest: '', }); } mockdb[commit.commitId] = commit; return Promise.resolve({ status: 'OK', data: omit_1.default(commit, 'events', 'signedRequest'), }); }, }), 50); }), getByEntityName: () => new Promise((resolve) => { setTimeout(() => resolve({ status: 'OK', data: getEntities({ entityName, reducer, mockdb }), }), 50); }), getCommitById: ({ id }) => new Promise((resolve) => { setTimeout(() => resolve({ status: 'OK', data: filter_1.default(values_1.default(mockdb), ({ entityId }) => entityId === id), }), 50); }), getEntityName: () => entityName, fullTextSearchEntity: ({ entityName, query, cursor, pagesize }) => new Promise((resolve) => { setTimeout(() => { const items = getEntities({ entityName, reducer, mockdb }).filter((entity) => entity.toString().contains(query)); resolve({ status: 'OK', data: { total: items.length, cursor: 10, hasMore: false, items, }, }); }, 50); }), }); exports.getMockRepository = getMockRepository; //# sourceMappingURL=mockRepository.js.map