public async Task <IActionResult> GetAllArticles(ArticleFilterDto filterDto) { try { var records = await _articleService.GetAllAsync(filterDto); return(PagedOk(records, filterDto, records.TotalPageCount)); } catch (KeyNotFoundException) { return(NotFound()); } }
public async Task <Paged <ArticleDto> > GetAllAsync(ArticleFilterDto filterDto) { var result = await _articleRepository.GetArticlesAsync(filterDto); var list = result.List.Select(x => x.Adapt <ArticleDto>()).ToList(); var returnDto = new Paged <ArticleDto> { List = list, PageIndex = filterDto.PageIndex, PageSize = filterDto.PageSize, TotalPageCount = result.TotalPageCount, FilteredCount = result.FilteredCount, TotalCount = result.TotalCount }; return(returnDto); }
public async Task <Paged <Domain.Article> > GetArticlesAsync(ArticleFilterDto filterDto) { var query = _ctx.Articles.Include(x => x.Category).Include(x => x.Comments) .Include(x => x.ArticleTags).Where(x => !x.IsDeleted); var totalPagesCount = query.CalculatePageCount(filterDto.PageSize); if (!string.IsNullOrEmpty(filterDto.CategoryName)) { query = query.Where(x => x.Category != null && x.Category.Name.Contains(filterDto.CategoryName)); } if (!string.IsNullOrEmpty(filterDto.Title)) { query = query.Where(x => x.Title.Contains(filterDto.Title)); } var articles = await query.AsQueryable().OrderBy(filterDto.Ordination) .SkipTake(filterDto.PageIndex, filterDto.PageSize) .ToListAsync(); var tags = await _ctx.ArticleTags.Include(x => x.Tag).ToListAsync(); articles.ForEach(a => { a.ArticleTags = tags.Where(x => x.ArticleId == a.Id).ToList(); a.Tags = a.ArticleTags.Select(x => x.Tag).ToList(); }); if (!string.IsNullOrEmpty(filterDto.Tag)) { articles = articles.Where(x => x.Tags.Any(t => t.Name.Contains(filterDto.Tag))).ToList(); } return(new Paged <Domain.Article> { List = articles, PageIndex = filterDto.PageIndex, PageSize = filterDto.PageSize, TotalPageCount = totalPagesCount }); }