first commit
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
import { EventsHandler, IEventHandler } from '@nestjs/cqrs';
|
||||
import { ProjectCreatedEvent } from '@task-stream/api/tracker/domain';
|
||||
import { UpsertMaterializedProjectRepository } from '../ports/upsert-materialized-project.repository';
|
||||
import { UserDirectory } from '../ports/user-directory';
|
||||
import { ReadModelNotifier, versionOf } from './read-model-notifier';
|
||||
|
||||
@EventsHandler(ProjectCreatedEvent)
|
||||
export class ProjectCreatedEventHandler
|
||||
implements IEventHandler<ProjectCreatedEvent>
|
||||
{
|
||||
constructor(
|
||||
private readonly upsertMaterializedProjectRepository: UpsertMaterializedProjectRepository,
|
||||
private readonly users: UserDirectory,
|
||||
private readonly notifier: ReadModelNotifier,
|
||||
) {}
|
||||
|
||||
async handle(event: ProjectCreatedEvent) {
|
||||
const { project } = event;
|
||||
const users = await this.users.refs(project.members.map((m) => m.userId));
|
||||
await this.upsertMaterializedProjectRepository.upsert({
|
||||
id: project.id,
|
||||
key: project.key,
|
||||
name: project.name,
|
||||
description: project.description,
|
||||
owner: users.of(project.ownerId),
|
||||
members: project.members.map((m) => ({
|
||||
user: users.of(m.userId),
|
||||
role: m.role,
|
||||
})),
|
||||
createdAt: project.createdAt,
|
||||
updatedAt: project.updatedAt,
|
||||
version: versionOf(event),
|
||||
});
|
||||
await this.notifier.project(event, [project.ownerId]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user