Beispiel #1
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));
        }
Beispiel #2
0
 public UsersPoolViewModel(PaginationViewModel pagination, IEnumerable <User> users, UserQueryFilters filters)
 {
     Pagination = pagination;
     Users      = users;
     Filters    = filters;
 }