public async Task <OperationResultResponse <NewsResponse> > ExecuteAsync(Guid newsId) { OperationResultResponse <NewsResponse> response = new(); DbNews dbNews = await _repository.GetAsync(newsId); if (dbNews == null) { _httpContextAccessor.HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; response.Status = OperationResultStatusType.Failed; return(response); } List <DepartmentData> departmentsData = await GetDepartmentAsync(dbNews.Id, response.Errors); List <UserData> usersData = await GetUsersDataAsync( new List <Guid>() { dbNews.AuthorId, dbNews.CreatedBy }, response.Errors); List <ImageData> avatarsImages = await GetUsersAvatarsAsync( usersData?.Where(ud => ud.ImageId.HasValue).Select(ud => ud.ImageId.Value).ToList(), response.Errors); List <UserInfo> usersInfo = usersData? .Select(ud => _userInfoMapper.Map(ud, avatarsImages?.FirstOrDefault(ai => ai.ImageId == ud.ImageId))).ToList(); response.Body = _mapper .Map( dbNews, _departmentInfoMapper.Map(departmentsData?.FirstOrDefault()), usersInfo?.FirstOrDefault(ui => ui.Id == dbNews.AuthorId), usersInfo?.FirstOrDefault(ui => ui.Id == dbNews.CreatedBy)); response.Status = response.Errors.Any() ? OperationResultStatusType.PartialSuccess : OperationResultStatusType.FullSuccess; return(response); }
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); }