public async Task<IActionResult> GetListItems([FromRoute] string filtersObj) { _logger.LogInformation( "Listing all items1111111111111"); MaterialFiltersDto filters; if (filtersObj == null) { filters = new MaterialFiltersDto{Page = 1}; } else { filters = (MaterialFiltersDto) JsonConvert.DeserializeObject(filtersObj, typeof(MaterialFiltersDto)); } var result = await _materialService.GetDtoAllAsync(filters); return Ok(result); }
public async Task<PageableData<MaterialMiniDto>> GetDtoAllAsync(MaterialFiltersDto filters) { var itemPerPage = GlobalConstants.NewsPerPage; Expression<Func<Material, bool>> filter = x => x.Type == filters.MaterialType; if (filters.CategoryId.HasValue) { filter = filter.And(x => x.CategoryId == filters.CategoryId.Value); } if (!string.IsNullOrWhiteSpace(filters.UserName)) { Expression<Func<Material, bool>> newFilter = x => x.Author.UserName.Contains(filters.UserName); filter = filter.And(newFilter); } ICollection<Material> topNews = new List<Material>(); if (filters.Page == GlobalConstants.FirstPage) { topNews = await _materialRepository.GetTopMaterialsAsync(filter); itemPerPage = GlobalConstants.NewsPerPage - topNews.Count > 0 ? GlobalConstants.NewsPerPage - topNews.Count : 0; } var allNewsCount = await _materialRepository.GetCountAsync(filter); var news = await _materialRepository.GetOrderedByDescAndNotTopAsync(filters.Page, itemPerPage, filter, x => x.AdditionTime); var newsForView = topNews.Concat(news); var newsDtos = _mapper.Map<IEnumerable<MaterialMiniDto>>(newsForView); var result = new PageableData<MaterialMiniDto>(newsDtos, filters.Page, allNewsCount); return result; }