eventric
Version:
behavior-first application development
66 lines (50 loc) • 1.98 kB
text/coffeescript
class InMemoryStore
_domainEvents: {}
_projections: {}
initialize: (, [options]...) ->
new Promise (resolve, reject) =>
= "#{@_context.name}.DomainEvents"
= "#{@_context.name}.Projections"
[] = []
resolve()
saveDomainEvent: (domainEvent, callback) ->
new Promise (resolve, reject) =>
[].push domainEvent
resolve domainEvent
findDomainEventsByName: (name, callback) ->
if name instanceof Array
checkFn = (eventName) ->
(name.indexOf eventName) > -1
else
checkFn = (eventName) ->
eventName == name
events = [].filter (event) ->
checkFn event.name
callback null, events
findDomainEventsByNameAndAggregateId: (name, aggregateId, callback) ->
if name instanceof Array
checkNameFn = (eventName) ->
(name.indexOf eventName) > -1
else
checkNameFn = (eventName) ->
eventName == name
if aggregateId instanceof Array
checkAggregateIdFn = (eventAggregateId) ->
(aggregateId.indexOf eventAggregateId) > -1
else
checkAggregateIdFn = (eventAggregateId) ->
eventAggregateId == aggregateId
events = [].filter (event) ->
(checkNameFn event.name) and (checkAggregateIdFn event.aggregate?.id)
callback null, events
findDomainEventsByAggregateId: (aggregateId, callback) ->
if aggregateId instanceof Array
checkFn = (eventAggregateId) ->
(aggregateId.indexOf eventAggregateId) > -1
else
checkFn = (eventAggregateId) ->
eventAggregateId == aggregateId
events = [].filter (event) ->
checkFn event.aggregate?.id
callback null, events
module.exports = InMemoryStore