eventric
Version:
Build JavaScript applications with Behaviour-driven Domain Design. Based on DDD, BDD, CQRS and EventSourcing.
102 lines (72 loc) • 3.09 kB
text/coffeescript
STORE_SUPPORTS = ['domain_events', 'projections']
class InMemoryStore
_domainEvents: {}
_projections: {}
initialize: (, [options]..., callback) ->
= "#{@_contextName}.DomainEvents"
= "#{@_contextName}.Projections"
[] = []
callback()
saveDomainEvent: (domainEvent, callback) ->
[].push domainEvent
callback null, domainEvent
findAllDomainEvents: (callback) ->
callback null, []
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
findDomainEventsByAggregateName: (aggregateName, callback) ->
if aggregateName instanceof Array
checkFn = (eventAggregateName) ->
(aggregateName.indexOf eventAggregateName) > -1
else
checkFn = (eventAggregateName) ->
eventAggregateName == aggregateName
events = [].filter (event) ->
checkFn event.aggregate?.name
callback null, events
getProjectionStore: (projectionName, callback) ->
[] ?= {}
[][projectionName] ?= {}
callback null, [][projectionName]
clearProjectionStore: (projectionName, callback) ->
[] ?= {}
[][projectionName] ?= {}
delete [][projectionName]
callback null, null
checkSupport: (check) ->
(STORE_SUPPORTS.indexOf check) > -1
module.exports = InMemoryStore