using AutoMapper; using MediatR; using mws.backend.dotnet.application.Common; using mws.backend.dotnet.application.Permissions; using mws.backend.dotnet.domain.Documents; namespace mws.backend.dotnet.application.Documents; public record UpdateDocumentCommand(Guid UserId, Guid DocumentId, UpdateDocumentRequest Request) : IRequest; public class UpdateDocumentHandler(IUnitOfWork uow, IMapper mapper) : IRequestHandler { public async Task Handle(UpdateDocumentCommand command, CancellationToken ct) { var doc = await DocumentAccess.GetDocumentForUserAsync(uow, command.UserId, command.DocumentId, ct); await DocumentAccess.EnsureDocumentPermissionAsync(uow, command.UserId, doc.ProjectId, PermissionAction.Edit, ct); var request = command.Request; if (string.IsNullOrWhiteSpace(request.Title)) { throw new BadRequestException("Title is required"); } doc.Title = request.Title.Trim(); if (doc.Type == DocumentType.Document) { doc.Content = request.Content; doc.UpdatedAt = DateTime.UtcNow; doc.UpdatedBy = command.UserId; } else { doc.UpdatedAt = DateTime.UtcNow; doc.UpdatedBy = command.UserId; } await uow.SaveChangesAsync(ct); return mapper.Map(doc); } }