UNPKG

@arpinum/ddd

Version:
56 lines (45 loc) 1.25 kB
'use strict'; const _ = require('lodash'); const {try: asyncTry} = require('@arpinum/promise'); const {stream} = require('../tools'); class MemoryEventStore { constructor() { this.events = []; } add(event) { let self = this; return asyncTry(() => { this.events.push(Object.assign({}, event, {id: generateId()})); }); function generateId() { return self.events.length; } } addAll(events) { return asyncTry(() => { for (let event of events) { this.add(event); } }); } eventsFromAggregate(id, type) { let results = _.filter( this.events, e => _.get(e, 'aggregate.id') === id && _.get(e, 'aggregate.type') === type); return stream.createArrayStream(results); } eventsFromTypes(types, newerThanThisEventId) { let results = this.allEventsFromTypes(types, newerThanThisEventId); return stream.createArrayStream(results); } allEventsFromTypes(types, newerThanThisEventId) { return _.filter(this.events, e => { let valid = _.includes(types, e.type); if (!_.isNil(newerThanThisEventId)) { valid = valid && e.id > newerThanThisEventId; } return valid; }); } } module.exports = MemoryEventStore;