public async Task <FindResultResponse <NewsInfo> > Find(
     [FromServices] IFindNewsCommand command,
     [FromQuery] FindNewsFilter findNewsFilter)
 {
     return(await command.ExecuteAsync(findNewsFilter));
 }
 public async Task <(List <DbNews> dbNewsList, int totalCount)> FindAsync(FindNewsFilter filter)
 {
     if (filter == null)
     {
         return(null, default);
        public async Task <FindResultResponse <NewsInfo> > ExecuteAsync(FindNewsFilter findNewsFilter)
        {
            FindResultResponse <NewsInfo> response = new();

            if (!_baseFindValidator.ValidateCustom(findNewsFilter, out List <string> errors))
            {
                _httpContextAccessor.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;

                response.Status = OperationResultStatusType.Failed;
                response.Errors = errors;
                return(response);
            }

            (List <DbNews> dbNewsList, int totalCount) =
                await _repository.FindAsync(findNewsFilter);

            if (dbNewsList == null)
            {
                return(response);
            }

            List <DepartmentData> departmentsData = await GetDepartmentsAsync(
                dbNewsList
                .Select(n => n.Id)
                .Distinct()
                .ToList(),
                response.Errors);

            List <UserData> usersData = await GetUsersDataAsync(
                dbNewsList
                .Select(n => n.AuthorId)
                .Concat(dbNewsList.Select(n => n.CreatedBy))
                .Distinct()
                .ToList(),
                response.Errors);

            List <ImageData> avatarImages = await GetImagesDataAsync(
                usersData?
                .Where(u => u.ImageId.HasValue)
                .Select(u => u.ImageId.Value)
                .ToList(),
                response.Errors);

            List <UserInfo> usersInfo = usersData?
                                        .Select(ud => _userInfoMapper.Map(ud, avatarImages?.FirstOrDefault(id => ud.ImageId == id.ImageId)))
                                        .ToList();

            response.Body = dbNewsList
                            .Select(dbNews => _mapper.Map(
                                        dbNews,
                                        _departmentInfoMapper.Map(departmentsData?.FirstOrDefault(di => di.NewsIds.Contains(dbNews.Id))),
                                        usersInfo?.FirstOrDefault(ud => dbNews.AuthorId == ud.Id),
                                        usersInfo?.FirstOrDefault(ud => dbNews.CreatedBy == ud.Id)))
                            .ToList();

            response.TotalCount = totalCount;

            response.Status = response.Errors.Any()
        ? OperationResultStatusType.PartialSuccess
        : OperationResultStatusType.FullSuccess;

            return(response);
        }