import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; import { CommentThreadResolvedEvent } from '@task-stream/api/tracker/domain'; import { UpsertMaterializedCommentRepository } from '../ports/upsert-materialized-comment.repository'; import { UserDirectory } from '../ports/user-directory'; import { ReadModelNotifier, versionOf } from './read-model-notifier'; @EventsHandler(CommentThreadResolvedEvent) export class CommentThreadResolvedEventHandler implements IEventHandler { constructor( private readonly upsertMaterializedCommentRepository: UpsertMaterializedCommentRepository, private readonly users: UserDirectory, private readonly notifier: ReadModelNotifier, ) {} async handle(event: CommentThreadResolvedEvent) { const refs = await this.users.refs([event.actorId]); await this.upsertMaterializedCommentRepository.upsert({ id: event.aggregateId, resolved: event.resolved, resolvedBy: event.resolved ? refs.of(event.actorId) : null, resolvedAt: event.resolved ? event.occurredAt : null, version: versionOf(event), }); await this.notifier.comment(event.aggregateId, event.issueId, event); } }