Пример #1
0
 private static DateTime GetMaxDate(ArticleSortType sortType)
 {
     return(sortType switch
     {
         ArticleSortType.Weekly => DateTime.Now.AddDays(-7),
         ArticleSortType.Monthly => DateTime.Now.AddMonths(-1),
         _ => DateTime.MinValue
     });
Пример #2
0
        public List <ArticleViewModel> GetArticles(string tagName, ArticleSortType sortType, string search,
                                                   int skip, int take)
        {
            DateTime filterDate = GetMaxDate(sortType);
            var      query      = _context.Articles
                                  .Where(article => article.CreateDate >= filterDate && article.Confirmed);

            if (tagName != null)
            {
                query = query.Where(article =>
                                    article.ArticleTags.Any(articleTag => articleTag.Tag.Name.Equals(tagName)));
            }

            if (search != null)
            {
                query = query.Where(article => article.Title.Contains(search));
            }

            var viewModelQuery = query.Select(article => new ArticleViewModel
            {
                Id         = article.Id,
                AuthorName = article.Author.UserName,
                Title      = article.Title,
                Text       = article.Text,
                Tags       = article.ArticleTags.Select(tag => tag.Tag.Name).ToList(),
                LikesCount = article.ArticleLikes.Count,
                CreateDate = article.CreateDate,
                Confirmed  = article.Confirmed
            }).OrderByDescending(article => article.CreateDate);

            if (!sortType.Equals(ArticleSortType.Feed))
            {
                viewModelQuery = viewModelQuery.OrderByDescending(a => a.LikesCount)
                                 .ThenByDescending(article => article.CreateDate);
            }

            return(viewModelQuery.Skip(skip).Take(take).ToList());
        }