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