@fabric-es/fabric-cqrs
Version:
Hyperledger Fabric middleware for event sourcing and cqrs pattern
67 lines • 2.82 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPrivateMockRepository = void 0;
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 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 getPrivateMockRepository = (mockdb, entityName, reducer) => ({
create: ({ enrollmentId, id }) => ({
save: ({ events }) => {
const entity = utils_1.createCommit({
id,
entityName,
version: 0,
events,
});
mockdb[entity.commitId] = entity;
return new Promise((resolve) => setTimeout(() => resolve({
status: 'OK',
data: omit_1.default(entity, ['events']),
}), 50));
},
}),
getById: ({ enrollmentId, id }) => 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 }) => {
const entity = utils_1.createCommit({
id,
entityName,
version: matched.length,
events,
});
mockdb[entity.commitId] = entity;
return Promise.resolve({
status: 'OK',
data: omit_1.default(entity, ['events']),
});
},
}), 50);
}),
getCommitByEntityName: () => new Promise((resolve) => {
setTimeout(() => {
const data = [];
filter_1.default(values_1.default(mockdb), (commit) => commit.entityName === entityName).forEach((commit) => data.push(commit));
resolve({ status: 'OK', data });
}, 50);
}),
getEntityName: () => entityName,
});
exports.getPrivateMockRepository = getPrivateMockRepository;
//# sourceMappingURL=mockPrivatedataRepo.js.map