using MediatR; using mws.backend.dotnet.application.Audit; using mws.backend.dotnet.application.Common; using mws.backend.dotnet.application.Permissions; using mws.backend.dotnet.domain.Projects; namespace mws.backend.dotnet.application.Projects; public record ArchiveProjectCommand(Guid UserId, Guid ProjectId) : IRequest, IAuditableRequest { public string Action => "Project.Archive"; public string EntityType => "Project"; public Guid? EntityId => ProjectId; } public class ArchiveProjectHandler(IUnitOfWork uow, IPermissionService permissions, IAuditContext auditContext) : IRequestHandler { public async Task Handle(ArchiveProjectCommand command, CancellationToken ct) { await permissions.EnsureAsync(command.UserId, "projects", PermissionAction.Delete, ct); var project = await ProjectAccess.GetForUserOrThrowAsync(uow, command.UserId, command.ProjectId, ct); project.Status = ProjectStatus.Archived; project.UpdatedAt = DateTime.UtcNow; await uow.SaveChangesAsync(ct); auditContext.EntityName = project.Name; } }