Files
task-stream/libs/api/tracker/application/src/lib/commands/update-release.command-handler.ts
2026-10-03 13:40:26 +02:00

38 lines
1.2 KiB
TypeScript

import { CommandHandler, ICommandHandler } from '@nestjs/cqrs';
import { ReleaseNamesRepository } from '../ports/release-names.repository';
import { CommandResult, ack } from './command-result';
import { UpdateReleaseCommand } from './update-release.command';
import { WriteAccess } from './write-access';
@CommandHandler(UpdateReleaseCommand)
export class UpdateReleaseCommandHandler
implements ICommandHandler<UpdateReleaseCommand>
{
constructor(
private readonly access: WriteAccess,
private readonly releaseNames: ReleaseNamesRepository,
) {}
async execute(command: UpdateReleaseCommand): Promise<CommandResult> {
const release = await this.access.release(command.releaseId);
(await this.access.project(release.projectId)).assertCanManage(
command.actorId,
);
const previousName = release.name;
release.update(command.actorId, command.changes);
if (release.name !== previousName) {
await this.releaseNames.reserve(
release.projectId,
release.name,
release.id,
);
}
await release.commitAndWait();
if (release.name !== previousName) {
await this.releaseNames.free(release.projectId, previousName);
}
return ack(release);
}
}