first commit
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import { EventsHandler, IEventHandler } from '@nestjs/cqrs';
|
||||
import { IssueCreatedEvent } from '@task-stream/api/tracker/domain';
|
||||
import { FindReleasesRepository } from '../ports/find-releases.repository';
|
||||
import { UpsertMaterializedIssueRepository } from '../ports/upsert-materialized-issue.repository';
|
||||
import { UserDirectory } from '../ports/user-directory';
|
||||
import { ReadModelNotifier, versionOf } from './read-model-notifier';
|
||||
|
||||
@EventsHandler(IssueCreatedEvent)
|
||||
export class IssueCreatedEventHandler
|
||||
implements IEventHandler<IssueCreatedEvent>
|
||||
{
|
||||
constructor(
|
||||
private readonly upsertMaterializedIssueRepository: UpsertMaterializedIssueRepository,
|
||||
private readonly findReleases: FindReleasesRepository,
|
||||
private readonly users: UserDirectory,
|
||||
private readonly notifier: ReadModelNotifier,
|
||||
) {}
|
||||
|
||||
async handle(event: IssueCreatedEvent) {
|
||||
const { issue } = event;
|
||||
const users = await this.users.refs([issue.reporterId, issue.assigneeId]);
|
||||
const release = issue.releaseId
|
||||
? await this.findReleases.findById(issue.releaseId)
|
||||
: null;
|
||||
await this.upsertMaterializedIssueRepository.upsert({
|
||||
id: issue.id,
|
||||
projectId: issue.projectId,
|
||||
projectKey: issue.key.slice(0, issue.key.lastIndexOf('-')),
|
||||
number: issue.number,
|
||||
key: issue.key,
|
||||
type: issue.type,
|
||||
area: issue.area,
|
||||
title: issue.title,
|
||||
description: issue.description,
|
||||
status: issue.status,
|
||||
priority: issue.priority,
|
||||
reporter: users.of(issue.reporterId),
|
||||
assignee: users.ofNullable(issue.assigneeId),
|
||||
release: release ? { id: release.id, name: release.name } : null,
|
||||
labels: issue.labels,
|
||||
figmaUrl: issue.figmaUrl,
|
||||
storyPoints: issue.storyPoints,
|
||||
dueDate: issue.dueDate,
|
||||
createdAt: issue.createdAt,
|
||||
updatedAt: issue.updatedAt,
|
||||
version: versionOf(event),
|
||||
});
|
||||
await this.notifier.issue(issue.id, event);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user