Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }