UNPKG

eventric

Version:

behavior-first application development

46 lines (29 loc) 1.33 kB
logger = require 'eventric/logger' class Aggregate constructor: (@_context, @_name, AggregateClass) -> @_domainEvents = [] @instance = new AggregateClass @instance.$emitDomainEvent = @emitDomainEvent emitDomainEvent: (domainEventName, domainEventPayload) => DomainEventClass = @_context.getDomainEvent domainEventName if !DomainEventClass throw new Error "Tried to emitDomainEvent '#{domainEventName}' which is not defined" aggregate = id: @id name: @_name domainEvent = @_context.createDomainEvent domainEventName, DomainEventClass, domainEventPayload, aggregate @_domainEvents.push domainEvent @_handleDomainEvent domainEventName, domainEvent logger.debug "Created and Handled DomainEvent in Aggregate", domainEvent _handleDomainEvent: (domainEventName, domainEvent) -> if @instance["handle#{domainEventName}"] @instance["handle#{domainEventName}"] domainEvent else logger.debug "Tried to handle the DomainEvent '#{domainEventName}' without a matching handle method" getDomainEvents: => @_domainEvents applyDomainEvents: (domainEvents) -> @_applyDomainEvent domainEvent for domainEvent in domainEvents _applyDomainEvent: (domainEvent) -> @_handleDomainEvent domainEvent.name, domainEvent module.exports = Aggregate