Exemple #1
0
        public async Task <IActionResult> GetAllArticles(ArticleFilterDto filterDto)
        {
            try
            {
                var records = await _articleService.GetAllAsync(filterDto);

                return(PagedOk(records, filterDto, records.TotalPageCount));
            }
            catch (KeyNotFoundException)
            {
                return(NotFound());
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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
            });
        }