public TopicServiceModel GetAllTopicsBySearch(string input, int page = GlobalConstants.DefaultPageNumber) { var topicsFromDb = this.GetAllAsQueryable <TopicInfoViewModel>(); var matchingTopics = new List <TopicInfoViewModel>(); foreach (var topicFromDb in topicsFromDb) { var normalizedTitle = topicFromDb.Title.ToLower(); var normalizedContent = WebUtility.HtmlDecode(Regex.Replace(topicFromDb.Content, "<.*?>", string.Empty).ToLower()); if (normalizedTitle.Contains(input.ToLower()) || normalizedContent.Contains(input.ToLower())) { matchingTopics.Add(topicFromDb); } } var topicsForPage = matchingTopics.OrderByDescending(c => c.CreatedOn).Skip((page - 1) * GlobalConstants.DefaultPageSize) .Take(GlobalConstants.DefaultPageSize).ToList(); var serviceModel = new TopicServiceModel() { TotalTopicsCount = matchingTopics.Count(), Topics = topicsForPage, }; return(serviceModel); }
public TopicServiceModel GetTopicsByCategoryName(string categoryName, int page = GlobalConstants.DefaultPageNumber) { var topics = this.GetAllAsQueryable <TopicInfoViewModel>() .Where(t => t.CategoryName == categoryName) .ToList(); var topicsForPage = topics.OrderByDescending(t => t.CreatedOn) .Skip((page - 1) * GlobalConstants.DefaultPageSize) .Take(GlobalConstants.DefaultPageSize); var serviceModel = new TopicServiceModel() { TotalTopicsCount = topics.Count, Topics = topicsForPage, }; return(serviceModel); }
public TopicServiceModel GetTrendingTopics(int page) { var topics = this.GetAllAsQueryable <TopicInfoViewModel>() .Where(t => t.CreatedOn > DateTime.Now.AddDays(-7)) .OrderByDescending(t => t.Likes) .ThenBy(x => x.Dislikes) .ToList(); var topicsForPage = topics .Skip((page - 1) * GlobalConstants.DefaultPageSize) .Take(GlobalConstants.DefaultPageSize); var topicsServiceModel = new TopicServiceModel() { TotalTopicsCount = topics.Count, Topics = topicsForPage, }; return(topicsServiceModel); }
public TopicServiceModel GetTopicsOfFollowedUsers(string userId, int page) { var topics = this.userRepository .All() .Where(x => x.Id == userId) .SelectMany(x => x.Following.SelectMany(x => x.FollowedUser.Topics)) .OrderByDescending(x => x.CreatedOn) .AsQueryable() .To <TopicInfoViewModel>() .ToList(); var topicsForPage = topics .Skip((page - 1) * GlobalConstants.DefaultPageSize) .Take(GlobalConstants.DefaultPageSize); var topicsServiceModel = new TopicServiceModel() { TotalTopicsCount = topics.Count(), Topics = topicsForPage, }; return(topicsServiceModel); }