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