import { Injectable } from '@nestjs/common'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { type DomainEvent } from '../domain/domain-event'; @Injectable() export class EventBusService { constructor(private readonly eventEmitter: EventEmitter2) {} publish(event: DomainEvent): void { this.eventEmitter.emit(event.eventName, event); } publishAll(events: DomainEvent[]): void { for (const event of events) { this.publish(event); } } async publishAsync(event: DomainEvent): Promise { await this.eventEmitter.emitAsync(event.eventName, event); } }