using MediatR; using mws.backend.dotnet.application.Common; using mws.backend.dotnet.domain.Projects; namespace mws.backend.dotnet.application.Projects; public record ArchiveProjectCommand(Guid UserId, Guid ProjectId) : IRequest; public class ArchiveProjectHandler(IUnitOfWork uow) : IRequestHandler { public async Task Handle(ArchiveProjectCommand command, CancellationToken ct) { var project = await ProjectAccess.GetForUserOrThrowAsync(uow, command.UserId, command.ProjectId, ct); if (await uow.Projects.GetMemberRoleAsync(command.ProjectId, command.UserId, ct) != MemberRole.Owner) { throw new ForbiddenException("Only the project owner can archive the project"); } project.Status = ProjectStatus.Archived; project.UpdatedAt = DateTime.UtcNow; await uow.SaveChangesAsync(ct); } }