Beispiel #1
0
        public async Task <IActionResult> Index(int page = 1)
        {
            var currentUserId = GetCurrentUserId();
            var query         = _articlesRepository.GetAllFeed(currentUserId);

            var count = await query.CountAsync();

            var paginationModel = new PaginationViewModel("Home", "Index", count, page);

            try
            {
                paginationModel.Validate(page);
            }
            catch (PaginationOutOfRangeException ex)
            {
                page = ex.Negative ? 1 : paginationModel.TotalPages;

                return(RedirectToAction("Index", new { Page = page }));
            }

            var articles = await paginationModel.GetQuery(query)
                           .ToListAsync();


            var model = new HomeFeedViewModel(paginationModel, articles);

            return(View(model));
        }
Beispiel #2
0
        public async Task <IActionResult> MyArticles(int page = 1)
        {
            var query = _articlesRepository.GetByOwner(GetCurrentUserId());

            var count = await query.CountAsync();

            var paginationModel = new PaginationViewModel("Feed", "MyArticles", count, page);

            try
            {
                paginationModel.Validate(page);
            }
            catch (PaginationOutOfRangeException ex)
            {
                page = ex.Negative ? 1 : paginationModel.TotalPages;

                return(RedirectToAction("MyArticles", new { Page = page }));
            }

            var articles = await paginationModel.GetQuery(query
                                                          .OrderByDescending(article => article.CreatedAt))
                           .ToListAsync();


            var model = new MyArticlesViewModel(paginationModel, articles);

            return(View(model));
        }
Beispiel #3
0
        public async Task <IActionResult> UsersPool(int page = 1, string nameToSearch = "",
                                                    UserQueryFilters.DegreesOfPopularity popularity = UserQueryFilters.DegreesOfPopularity.Any,
                                                    UserQueryFilters.ArticleCounts articleCount     = UserQueryFilters.ArticleCounts.Any)
        {
            var query = _usersRepository.GetPublicPool(GetCurrentUserId());

            var count = await query.CountAsync();

            var paginationModel = new PaginationViewModel("Feed", "MyArticles", count, page);

            try
            {
                paginationModel.Validate(page);
            }
            catch (PaginationOutOfRangeException ex)
            {
                page = ex.Negative ? 1 : paginationModel.TotalPages;

                return(RedirectToAction("UsersPool", new { Page = page }));
            }

            var filters = new UserQueryFilters()
            {
                NameToSearch = nameToSearch,
                Popularity   = popularity,
                ArticleCount = articleCount
            };

            query = filters.BuildQuery(query);

            var users = await paginationModel.GetQuery(query)
                        .ToListAsync();

            var model = new UsersPoolViewModel(paginationModel, users, filters);

            return(View(model));
        }