public async Task <IEnumerable <ProjectDetailInformationDto> > Handle(ProjectsDetailInformationQuery request, CancellationToken cancellationToken)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            var projects = await _context.Projects
                           .Include(p => p.Author)
                           .Include(p => p.Team)
                           .ThenInclude(t => t.Members)
                           .Include(p => p.Tasks)
                           .ToListAsync();

            var result = new List <ProjectDetailInformationDto>();

            foreach (var project in projects)
            {
                var dto = new ProjectDetailInformationDto()
                {
                    Project      = _mapper.Map <ProjectDto>(project),
                    LongestTask  = _mapper.Map <TaskDto>(project.Tasks.OrderByDescending(t => t.Description.Length).FirstOrDefault()),
                    ShortestTask = _mapper.Map <TaskDto>(project.Tasks.OrderBy(t => t.Name.Length).FirstOrDefault()),
                    TeamCount    = (project.Description.Length > 20 || project.Tasks.Count() < 3) ? project.Team.Members.Count() : 0
                };

                result.Add(dto);
            }

            return(result);
        }
 public Task <IActionResult> GetProjectsDetailInfortmation(ProjectsDetailInformationQuery query) => ExecuteQuery(query);