Files
2026-01-25 12:34:27 +03:30

49 lines
2.1 KiB
C#

using GozareshgirProgramManager.Application._Common.Extensions;
using GozareshgirProgramManager.Application._Common.Interfaces;
using GozareshgirProgramManager.Application._Common.Models;
using GozareshgirProgramManager.Domain.ProjectAgg.Entities.Task.TaskSection;
using Microsoft.EntityFrameworkCore;
namespace GozareshgirProgramManager.Application.Modules.TaskSectionTimeRequests.Queries.CreateTimeRequestDetails;
public record CreateTimeRequestDetailsResponse(List<CreateTimeRequestDetailsRevision> Revisions);
public record CreateTimeRequestDetailsRevision(string Message, List<UploadedFileDto> Files);
public record CreateTimeRequestDetailsQuery(Guid TaskSectionId) : IBaseQuery<CreateTimeRequestDetailsResponse>;
public class
CreateTimeRequestDetailsQueryHandler : IBaseQueryHandler<CreateTimeRequestDetailsQuery,
CreateTimeRequestDetailsResponse>
{
private readonly IProgramManagerDbContext _context;
public CreateTimeRequestDetailsQueryHandler(IProgramManagerDbContext context)
{
_context = context;
}
public async Task<OperationResult<CreateTimeRequestDetailsResponse>> Handle(CreateTimeRequestDetailsQuery request,
CancellationToken cancellationToken)
{
var revisions = await _context.TaskSectionRevisions.Where(x =>
x.TaskSectionId == request.TaskSectionId && x.Status == RevisionReviewStatus.Pending).ToListAsync(cancellationToken: cancellationToken);
var fileIds = revisions.SelectMany(x => x.Files)
.Select(x => x.Id).ToList();
var files =await _context.UploadedFiles
.Where(x => fileIds.Contains(x.Id)).ToListAsync(cancellationToken: cancellationToken);
var resItem = revisions.Select(x =>
{
var selectFileIds = x.Files.Select(f => f.FileId).ToList();
var filesDto = files.Where(f => selectFileIds.Contains(f.Id))
.Select(f => f.ToDto()).ToList();
return new CreateTimeRequestDetailsRevision(x.Message, filesDto);
}).ToList();
var res = new CreateTimeRequestDetailsResponse(resItem);
return OperationResult<CreateTimeRequestDetailsResponse>.Success(res);
}
}