import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; import { ReleaseShippedEvent, ReleaseStatus, } from '@task-stream/api/tracker/domain'; import { UpsertMaterializedReleaseRepository } from '../ports/upsert-materialized-release.repository'; import { ReadModelNotifier, versionOf } from './read-model-notifier'; @EventsHandler(ReleaseShippedEvent) export class ReleaseShippedEventHandler implements IEventHandler { constructor( private readonly upsertMaterializedReleaseRepository: UpsertMaterializedReleaseRepository, private readonly notifier: ReadModelNotifier, ) {} async handle(event: ReleaseShippedEvent) { await this.upsertMaterializedReleaseRepository.upsert({ id: event.aggregateId, status: ReleaseStatus.RELEASED, releasedAt: event.occurredAt, version: versionOf(event), }); await this.notifier.release(event.aggregateId, event); } }