Files
task-stream/libs/api/tracker/application/src/lib/event-handlers/issue-assigned.event-handler.ts
2026-10-03 13:40:26 +02:00

28 lines
1.0 KiB
TypeScript

import { EventsHandler, IEventHandler } from '@nestjs/cqrs';
import { IssueAssignedEvent } from '@task-stream/api/tracker/domain';
import { UpsertMaterializedIssueRepository } from '../ports/upsert-materialized-issue.repository';
import { UserDirectory } from '../ports/user-directory';
import { ReadModelNotifier, versionOf } from './read-model-notifier';
@EventsHandler(IssueAssignedEvent)
export class IssueAssignedEventHandler
implements IEventHandler<IssueAssignedEvent>
{
constructor(
private readonly upsertMaterializedIssueRepository: UpsertMaterializedIssueRepository,
private readonly users: UserDirectory,
private readonly notifier: ReadModelNotifier,
) {}
async handle(event: IssueAssignedEvent) {
const users = await this.users.refs([event.assigneeId]);
await this.upsertMaterializedIssueRepository.upsert({
id: event.aggregateId,
assignee: users.ofNullable(event.assigneeId),
updatedAt: event.occurredAt,
version: versionOf(event),
});
await this.notifier.issue(event.aggregateId, event);
}
}