public async Task <IActionResult> Index(string search, string sort, int page = 1) { int take = 15; int skip = take * (page - 1); DataWithCount <IEnumerable <User> > participantsList = new DataWithCount <IEnumerable <User> >(); if (!string.IsNullOrWhiteSpace(sort) && Enum.IsDefined(typeof(SortUsersBy), sort)) { SortUsersBy userSort = (SortUsersBy)Enum.Parse(typeof(SortUsersBy), sort); participantsList = await _userService .GetPaginatedUserListAsync(skip, take, search, userSort); } else { participantsList = await _userService .GetPaginatedUserListAsync(skip, take, search); } PaginateViewModel paginateModel = new PaginateViewModel() { ItemCount = participantsList.Count, CurrentPage = page, ItemsPerPage = take }; if (paginateModel.MaxPage > 0 && paginateModel.CurrentPage > paginateModel.MaxPage) { return(RedirectToRoute( new { page = paginateModel.LastPage ?? 1 })); } ParticipantsListViewModel viewModel = new ParticipantsListViewModel() { Users = participantsList.Data, PaginateModel = paginateModel, Search = search, CanRemoveParticipant = UserHasPermission(Permission.DeleteParticipants), CanViewDetails = UserHasPermission(Permission.ViewParticipantDetails), SortUsers = Enum.GetValues(typeof(SortUsersBy)) }; return(View(viewModel)); }
Generate(Site site, int count, int challengePercent, int codePercent, bool quiet) { int[] minuteCeilings = { 60, 120, 500 }; float[] minuteCeilingDistribution = { 0.85F, 0.1F, 0.05F }; var userList = await _userService.GetPaginatedUserListAsync(new UserFilter()); var codeList = await _triggerService.GetPaginatedListAsync(new TriggerFilter { SecretCodesOnly = true }); var challengeList = await _challengeService .GetPaginatedChallengeListAsync(new ChallengeFilter()); var activities = new List <GeneratedActivity>(); var rand = new Bogus.Randomizer(); if (!quiet) { Console.Write($"Generating {count} activity items... "); } ProgressBar progress = quiet ? null : new ProgressBar(); try { for (int i = 0; i < count; i++) { bool addActivity = false; var randomUser = (await _userService.GetPaginatedUserListAsync(new UserFilter { SiteId = site.Id, Skip = rand.Int(0, userList.Count - 1), Take = 1 })).Data.First(); var act = new GeneratedActivity { User = randomUser, }; if (challengePercent > 0 && rand.Int(1, 100) <= challengePercent) { bool isValid = false; int challengeLookupCount = 0; await _configureUserSite.Lookup(randomUser.Id); _challengeService.ClearCachedUserContext(); DataWithCount <IEnumerable <Challenge> > randomChallenge = null; while (!isValid) { challengeLookupCount++; var filter = new ChallengeFilter() { Take = rand.Int(0, challengeList.Count - 1), Skip = 1 }; randomChallenge = await _challengeService.GetPaginatedChallengeListAsync(filter); if (randomChallenge.Data != null && randomChallenge.Data.FirstOrDefault() != null) { isValid = randomChallenge.Data.First().IsValid; } if (challengeLookupCount > 20) { _logger.LogError($"Unable to find an eligible challenge for user id {randomUser.Id} after 20 tries, giving up."); randomChallenge = null; addActivity = false; break; } } if (randomChallenge != null) { var randomTasks = await _challengeService .GetChallengeTasksAsync(randomChallenge.Data.First().Id); var randomTask = randomTasks .Skip(rand.Int(0, randomTasks.Count() - 1)).First(); randomTask.IsCompleted = true; act.ActivityType = ActivityType.ChallengeTasks; act.ChallengeId = randomChallenge.Data.First().Id; act.ChallengeTasks = new List <ChallengeTask> { randomTask }; addActivity = true; } } else { if (codePercent > 0 && rand.Int(1, 100) <= codePercent) { var randomCode = (await _triggerService.GetPaginatedListAsync(new TriggerFilter { SiteId = site.Id, Skip = rand.Int(0, codeList.Count - 1), Take = 1, SecretCodesOnly = true })).Data.First(); act.ActivityType = ActivityType.SecretCode; act.SecretCode = randomCode.SecretCode; addActivity = true; } else { act.ActivityAmount = rand.Int(1, rand .WeightedRandom <int>(minuteCeilings, minuteCeilingDistribution)); act.ActivityType = ActivityType.Default; addActivity = true; } } if (addActivity) { activities.Add(act); } if (progress != null) { progress.Report((double)i / count); } } } finally { if (progress != null) { progress.Dispose(); Console.WriteLine(); } } return(activities); }
internal static PagedResponse <T> GetPagingResponse <T>(TeamHttpContext httpContext, DataWithCount <T> entities) { return(new PagedResponse <T> { RowCount = entities.DataCount, DataEntries = entities.Data, RequestRef = httpContext.RequestId, Code = HttpStatusCode.OK }); }