49 lines
2.1 KiB
C#
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);
|
|
}
|
|
} |