コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }