import { CommandHandler, ICommandHandler } from '@nestjs/cqrs'; import { ProjectRole } from '@task-stream/api/tracker/domain'; import { CommandResult, ack } from './command-result'; import { DeleteCommentCommand } from './delete-comment.command'; import { WriteAccess } from './write-access'; @CommandHandler(DeleteCommentCommand) export class DeleteCommentCommandHandler implements ICommandHandler { constructor(private readonly access: WriteAccess) {} async execute(command: DeleteCommentCommand): Promise { const comment = await this.access.comment(command.commentId); const project = await this.access.project(comment.projectId); const role = project.roleOf(command.actorId); comment.delete( command.actorId, role === ProjectRole.OWNER || role === ProjectRole.ADMIN, ); await comment.commitAndWait(); return ack(comment); } }