eventric
Version:
behavior-first application development
85 lines (60 loc) • 2.63 kB
text/coffeescript
STORE_SUPPORTS = ['domain_events', 'projections']
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
getProjectionStore: (projectionName) -> new Promise (resolve, reject) =>
[] ?= {}
[][projectionName] ?= {}
resolve [][projectionName]
clearProjectionStore: (projectionName) -> new Promise (resolve, reject) =>
[] ?= {}
[][projectionName] ?= {}
delete [][projectionName]
resolve()
checkSupport: (check) ->
(STORE_SUPPORTS.indexOf check) > -1
module.exports = InMemoryStore