28 lines
1.0 KiB
TypeScript
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);
|
|
}
|
|
}
|