import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; import { ReleaseUpdatedEvent } from '@task-stream/api/tracker/domain'; import { UpsertMaterializedIssueRepository } from '../ports/upsert-materialized-issue.repository'; import { UpsertMaterializedReleaseRepository } from '../ports/upsert-materialized-release.repository'; import { ReadModelNotifier, versionOf } from './read-model-notifier'; @EventsHandler(ReleaseUpdatedEvent) export class ReleaseUpdatedEventHandler implements IEventHandler { constructor( private readonly upsertMaterializedReleaseRepository: UpsertMaterializedReleaseRepository, private readonly upsertMaterializedIssueRepository: UpsertMaterializedIssueRepository, private readonly notifier: ReadModelNotifier, ) {} async handle(event: ReleaseUpdatedEvent) { await this.upsertMaterializedReleaseRepository.upsert({ id: event.aggregateId, ...event.changes, version: versionOf(event), }); if (event.changes.name) { await this.upsertMaterializedIssueRepository.renameRelease( event.aggregateId, event.changes.name, ); } await this.notifier.release(event.aggregateId, event); } }