UNPKG

eventric

Version:

behavior-first application development

43 lines (29 loc) 1.38 kB
# TODO: Simple approach for global projections without changing the Projection service. Refactor when adding EventStore class GlobalContext constructor: -> @name = 'Global' findDomainEventsByName: (findArguments...) -> findDomainEventsByName = @_getAllContexts().map (context) -> context.findDomainEventsByName findArguments... Promise.all findDomainEventsByName .then (domainEventsByContext) => domainEvents = @_combineDomainEventsByContext domainEventsByContext @_sortDomainEventsByTimestamp domainEvents return domainEvents subscribeToDomainEvent: (eventName, domainEventHandler) -> subscribeToDomainEvents = @_getAllContexts().map (context) -> context.subscribeToDomainEvent eventName, domainEventHandler Promise.all subscribeToDomainEvents _getAllContexts: -> eventric = require '../eventric' contextNames = eventric.getRegisteredContextNames() contextNames.map (contextName) => eventric.remote contextName _combineDomainEventsByContext: (domainEventsByContext) -> domainEventsByContext.reduce (allDomainEvents, contextDomainEvents) -> allDomainEvents.concat contextDomainEvents , [] _sortDomainEventsByTimestamp: (domainEvents) -> domainEvents.sort (firstEvent, secondEvent) -> firstEvent.timestamp - secondEvent.timestamp module.exports = GlobalContext