diff --git a/Marco.Pms.Model/ViewModels/Activities/ListTaskVM.cs b/Marco.Pms.Model/ViewModels/Activities/ListTaskVM.cs index 409de50..6260e2a 100644 --- a/Marco.Pms.Model/ViewModels/Activities/ListTaskVM.cs +++ b/Marco.Pms.Model/ViewModels/Activities/ListTaskVM.cs @@ -11,6 +11,7 @@ namespace Marco.Pms.Model.ViewModels.Activities public double CompletedTask { get; set; } public BasicEmployeeVM? AssignedBy { get; set; } public Guid WorkItemId { get; set; } + public List? PreSignedUrls { get; set; } public WorkItem? WorkItem { get; set; } public List? teamMembers { get; set; } public List? comments { get; set; } diff --git a/Marco.Pms.Services/Controllers/TaskController.cs b/Marco.Pms.Services/Controllers/TaskController.cs index e81f6fe..8c93170 100644 --- a/Marco.Pms.Services/Controllers/TaskController.cs +++ b/Marco.Pms.Services/Controllers/TaskController.cs @@ -317,6 +317,13 @@ namespace MarcoBMS.Services.Controllers List employees = await _context.Employees.Where(e => employeeIdList.Contains(e.Id)).Include(e => e.JobRole).ToListAsync(); + List allComments = await _context.TaskComments.Where(c => taskIdList.Contains(c.TaskAllocationId)).ToListAsync(); + var allCommentIds = allComments.Select(c => c.Id).ToList(); + + var taskAttachments = await _context.TaskAttachments.Where(t => taskIdList.Contains(t.ReferenceId) || allCommentIds.Contains(t.ReferenceId)).ToListAsync(); + var documentIds = taskAttachments.Select(t => t.DocumentId).ToList(); + var documents = await _context.Documents.Where(d => documentIds.Contains(d.Id)).ToListAsync(); + List tasks = new List(); //foreach (var workItem in workItems) //{ @@ -325,10 +332,21 @@ namespace MarcoBMS.Services.Controllers var response = taskAllocation.ToListTaskVMFromTaskAllocation(); - List comments = await _context.TaskComments.Where(c => c.TaskAllocationId == taskAllocation.Id).ToListAsync(); + List comments = allComments.Where(c => c.TaskAllocationId == taskAllocation.Id).ToList(); List team = new List(); List taskMembers = teamMembers.Where(m => m.TaskAllocationId == taskAllocation.Id).ToList(); + var taskDocumentIds = taskAttachments.Where(t => t.ReferenceId == taskAllocation.Id).Select(t => t.DocumentId).ToList(); + var taskDocuments = documents.Where(d => taskDocumentIds.Contains(d.Id)).ToList(); + + List taskPreSignedUrls = new List(); + foreach (var document in taskDocuments) + { + string preSignedUrl = _s3Service.GeneratePreSignedUrlAsync(document.S3Key); + taskPreSignedUrls.Add(preSignedUrl); + } + response.PreSignedUrls = taskPreSignedUrls; + foreach (var taskMember in taskMembers) { var teamMember = employees.Find(e => e.Id == taskMember.EmployeeId); @@ -340,7 +358,18 @@ namespace MarcoBMS.Services.Controllers List commentVM = new List { }; foreach (var comment in comments) { - commentVM.Add(comment.ToCommentVMFromTaskComment()); + var commentDocumentIds = taskAttachments.Where(t => t.ReferenceId == comment.Id).Select(t => t.DocumentId).ToList(); + var commentDocuments = documents.Where(d => commentDocumentIds.Contains(d.Id)).ToList(); + List commentPreSignedUrls = new List(); + foreach (var document in commentDocuments) + { + string preSignedUrl = _s3Service.GeneratePreSignedUrlAsync(document.S3Key); + commentPreSignedUrls.Add(preSignedUrl); + } + CommentVM commentVm = comment.ToCommentVMFromTaskComment(); + commentVm.PreSignedUrls = commentPreSignedUrls; + + commentVM.Add(commentVm); } List checkLists = await _context.ActivityCheckLists.Where(x => x.ActivityId == (taskAllocation.WorkItem != null ? taskAllocation.WorkItem.ActivityId : Guid.Empty)).ToListAsync(); List checkListMappings = await _context.CheckListMappings.Where(c => c.TaskAllocationId == taskAllocation.Id).ToListAsync();