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)); }
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)); }
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)); }