public IQueryable <Model.ChallengeGroup> ApplyFilters(ChallengeGroupFilter filter) { var challengeGroupList = DbSet .AsNoTracking() .Where(_ => _.SiteId == filter.SiteId); if (filter.ChallengeGroupIds?.Count > 0) { challengeGroupList = challengeGroupList .Where(_ => !filter.ChallengeGroupIds.Contains(_.Id)); } if (filter.ActiveGroups.HasValue) { var inactiveChallengeIds = _context.Challenges .AsNoTracking() .Where(_ => !_.IsActive || _.IsDeleted) .Select(_ => _.Id); challengeGroupList = challengeGroupList .Where(_ => _.ChallengeGroupChallenges .Where(c => !inactiveChallengeIds.Contains(c.ChallengeId)) .Select(c => c.ChallengeGroupId) .Contains(_.Id) == filter.ActiveGroups.Value); } if (!string.IsNullOrWhiteSpace(filter.Search)) { challengeGroupList = challengeGroupList.Where(_ => _.Name.Contains(filter.Search)); } return(challengeGroupList); }
public async Task <IActionResult> GetChallengeGroupList(string challengeGroupIds, string search, int page = 1) { var filter = new ChallengeGroupFilter(page, 10) { ActiveGroups = true, Search = search }; if (!string.IsNullOrWhiteSpace(challengeGroupIds)) { filter.ChallengeGroupIds = challengeGroupIds.Split(',') .Where(_ => !string.IsNullOrWhiteSpace(_)) .Select(int.Parse) .ToList(); } var challengeGroupList = await _challengeService.GetPaginatedGroupListAsync(filter); var paginateModel = new PaginateViewModel { ItemCount = challengeGroupList.Count, CurrentPage = page, ItemsPerPage = filter.Take.Value }; var viewModel = new ChallengeGroupsListViewModel { ChallengeGroups = challengeGroupList.Data, PaginateModel = paginateModel, CanEditGroups = UserHasPermission(Permission.EditChallengeGroups), }; return(PartialView("_ChallengeGroupListPartial", viewModel)); }
public async Task <IEnumerable <ChallengeGroup> > PageAsync(ChallengeGroupFilter filter) { return(await ApplyFilters(filter) .OrderBy(_ => _.Name) .ApplyPagination(filter) .ProjectTo <ChallengeGroup>(_mapper.ConfigurationProvider) .ToListAsync()); }
GetPaginatedGroupListAsync(ChallengeGroupFilter filter) { VerifyPermission(Permission.ViewAllChallenges); filter.SiteId = GetCurrentSiteId(); return(new DataWithCount <IEnumerable <ChallengeGroup> > { Data = await _challengeGroupRepository.PageAsync(filter), Count = await _challengeGroupRepository.CountAsync(filter) }); }
public async Task <IActionResult> Groups(string search, int page = 1) { PageTitle = "Challenge Groups"; var filter = new ChallengeGroupFilter(page) { Search = search }; var groupList = await _challengeService.GetPaginatedGroupListAsync(filter); var paginateModel = new PaginateViewModel { ItemCount = groupList.Count, CurrentPage = page, ItemsPerPage = filter.Take.Value }; if (paginateModel.PastMaxPage) { return(RedirectToRoute( new { page = paginateModel.LastPage ?? 1 })); } var viewModel = new ChallengeGroupListViewModel() { ChallengeGroups = groupList.Data, PaginateModel = paginateModel, Search = search, CanAddGroups = UserHasPermission(Permission.AddChallengeGroups), CanEditGroups = UserHasPermission(Permission.EditChallengeGroups) }; return(View(viewModel)); }
public async Task <int> CountAsync(ChallengeGroupFilter filter) { return(await ApplyFilters(filter) .CountAsync()); }