@arpinum/ddd
Version:
DDD framework CQRS and ES friendly
26 lines (21 loc) • 713 B
JavaScript
const _ = require('lodash');
const t = require('tcomb');
const {Logger, LoggerContract} = require('@arpinum/log');
const {MessageBusContract} = require('../../types');
const Creation = t.interface({
eventBus: MessageBusContract,
options: t.maybe(t.interface({
log: t.maybe(LoggerContract)
}))
}, {strict: true});
function broadcastEventsDecorator(creation) {
let {eventBus, options: rawOptions} = Creation(creation);
let options = _.defaults({}, rawOptions, {
log: new Logger({fileName: __filename})
});
return result => {
options.log.debug('Broadcasting events');
return eventBus.broadcastAll(result.events).then(() => result);
};
}
module.exports = broadcastEventsDecorator;