public ActionResult Results(int?pageIndex) { var userId = this.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier); if (userId == null) { return(this.View()); } int pageSize = 50; var paginatedResults = new Dictionary <int, PaginatedCollection <TestResultEntryVm> >(); var testResultListDto = this._homeService.GetAllTestResults(); for (var i = 1; i <= testResultListDto.Count; i++) { if (testResultListDto.TryGetValue(i, out var results)) { var totalTestResults = new List <TestResultEntryVm>(); foreach (var result in results) { totalTestResults.Add(new TestResultEntryVm { Week1Points = result.Week1Points, Week1Place = result.Week1Place, Week2Points = result.Week2Points, Week2Place = result.Week2Place, Week3Points = result.Week3Points, Week3Place = result.Week3Place, FinalPoints = result.FinalPoints, FinalPlace = result.FinalPlace, UserId = result.UserId, CorrectAnswers = result.CorrectAnswersCount, WrongAnswers = result.WrongAnswersCount, FullName = this._homeService.PrepareUserEmailForRODO(result.Email), }); } paginatedResults.Add(i, new PaginatedCollection <TestResultEntryVm>(totalTestResults, pageIndex ?? 1, pageSize)); } } var userPosition = this._homeService.GetUserPosition(userId); var vm = new TestResultsVm() { UserWeek1Position = userPosition.Week1Place ?? 0, UserWeek2Position = userPosition.Week2Place ?? 0, UserWeek3Position = userPosition.Week3Place ?? 0, UserFinalPosition = userPosition.FinalPlace ?? 0, TotalTestResults = paginatedResults }; return(this.View(vm)); }
public ActionResult Results(int?pageIndex) { var userId = HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier); if (userId == null) { return(View()); } /* var testDtoList = _homeService.GetTestsWithUserAnswers(); * * var singleTestResults = testDtoList.Select(testDto => new SingleTestResultsVm() * { * TestNumber = testDto.Number, * TestEnded = testDto.HasEnded, * EndDate = testDto.EndDate, * StartDate = testDto.StartDate, * Entries = testDto.Answers * .Select( * ta => * new SingleTestResultEntry() * { * UserId = ta.UserId, * FullName = _homeService.PrepareUserEmailForRODO(ta.UserFullName), * CorrectAnswersCount = testDto.Answers.Count(a => a.UserId == ta.UserId), * WrongAnswersCount = testDto.WrongAnswers.Count(w => w.UserId == ta.UserId) * }) * .Union(testDto.WrongAnswers * .Select( * wa => * new SingleTestResultEntry() * { * UserId = wa.UserId, * FullName = _homeService.PrepareUserEmailForRODO(wa.UserFullName), * CorrectAnswersCount = testDto.Answers.Count(a => a.UserId == wa.UserId), * WrongAnswersCount = testDto.WrongAnswers.Count(w => w.UserId == wa.UserId) * })) * .GroupBy(e => new { e.FullName, e.CorrectAnswersCount, e.WrongAnswersCount }) * .Select(e => new SingleTestResultEntry * { * FullName = e.Key.FullName, * CorrectAnswersCount = e.Key.CorrectAnswersCount, * WrongAnswersCount = e.Key.WrongAnswersCount * }) * .OrderByDescending(e => e.CorrectAnswersCount) * .ToList() * }).ToList(); */ int pageSize = 50; var testResultListDto = _homeService.GetAllTestResults(); List <TotalTestResultEntryVm> totalTestResults = new List <TotalTestResultEntryVm>(); foreach (var result in testResultListDto) { totalTestResults.Add(new TotalTestResultEntryVm { Position = result.Position, UserId = result.UserId, FullName = _homeService.PrepareUserEmailForRODO(result.Email), CorrectAnswers = result.CorrectAnswersCount, WrongAnswers = result.WrongAnswersCount, TotalPoints = result.Points }); } var vm = new TestResultsVm() { CurrentUserPosition = _homeService.GetUserPosition(userId), //SingleTestResults = singleTestResults, TotalTestResults = PaginatedList <TotalTestResultEntryVm> .Create(totalTestResults, pageIndex ?? 1, pageSize) }; return(View(vm)); }
public ActionResult Results() { var testDtoList = _homeService.GetTestsWithUserAnswers(); var singleTestResults = testDtoList.Select(testDto => new SingleTestResultsVm() { TestNumber = testDto.Number, TestEnded = testDto.HasEnded, EndDate = testDto.EndDate, StartDate = testDto.StartDate, Entries = testDto.Answers.OrderBy(ta => ta.AnsweringTimeOffset) .Select( ta => new SingleTestResultEntry() { UserId = ta.UserId, FullName = ta.UserFullName, Offset = ta.AnsweringTimeOffset }) .ToList() }).ToList(); singleTestResults.ForEach(r => { for (int i = 0; i < r.Entries.Count; i++) { if (i >= 30) { continue; } var entry = r.Entries[i]; entry.Points = PointsPerPlace[i]; } }); List <TotalTestResultEntryVm> totalTestResults = null; if (testDtoList.All(t => t.HasEnded)) { var totalResultsDict = singleTestResults .SelectMany(r => r.Entries) .Select(r => new TotalTestResultEntryVm { FullName = r.FullName, UserId = r.UserId }) .Distinct(new TotalTestResultEntryVmComparer()) .ToDictionary(el => el.UserId); foreach (var singleTestResult in singleTestResults) { var userCountedDict = new Dictionary <string, bool>(); singleTestResult.Entries.ForEach(e => { var totalResult = totalResultsDict[e.UserId]; totalResult.TotalPoints += e.Points; totalResult.TotalOffset += e.Offset; userCountedDict[e.UserId] = true; }); foreach (var entry in totalResultsDict) { if (userCountedDict.ContainsKey(entry.Key) == false) { entry.Value.TotalOffset += singleTestResult.TestOffset; } } } totalTestResults = totalResultsDict .Values.ToList() .OrderByDescending(t => t.TotalPoints) .ThenBy(t => t.TotalOffset) .ToList(); } var vm = new TestResultsVm() { SingleTestResults = singleTestResults, TotalTestResults = totalTestResults }; return(View("Results", vm)); }