public LeaderBoardViewModel Get(LeaderBoardRequest request)
        {
            var scores = session
                .Query<Score, ScoreBoardIndex>()
                .Take(1024)
                .As<ScoreDisplay>()
                .ToList()
                .GroupBy(s => s.Athlete.Id);

            var events = session.Query<Event>().OrderBy(e => e.Number).ToList();

            return new LeaderBoardViewModel
                       {
                           Events = events,
                           Scores = scores.Select(score => new ScoreRow
                                                               {
                                                                   Athlete = score.First().Athlete,
                                                                   Total = score.Sum(s => s.Place),
                                                                   Place =
                                                                       events.Select(
                                                                           e =>
                                                                           new Tuple<int, int?>(e.Number,
                                                                                                score.Any(
                                                                                                    s =>
                                                                                                    s.Event.Number ==
                                                                                                    e.Number)
                                                                                                    ? score.Single(
                                                                                                        s =>
                                                                                                        s.Event.Number ==
                                                                                                        e.Number).Place
                                                                                                    : (int?) null))
                                                               })
                       };
        }
Пример #2
0
        public async Task <LeaderBoardViewModel> GetLeaderBoard(LeaderBoardRequest request)
        {
            var users       = userRepository.GetAll();
            var currentUser = Feature.CurrentUser(httpContextAccessor, userRepository);

            var result = new LeaderBoardViewModel();

            foreach (var user in users)
            {
                var userViewModel = new UserLeaderBoardViewModel()
                {
                    TotalPoint = await GetUserPoint(user.OId, request.FieldId),
                    UserAvatar = user.AvatarHash,
                    UserName   = $"{user.FirstName} {user.LastName}",
                    UserId     = user.OId
                };
                result.LeaderBoards.Add(userViewModel);
                if (userViewModel.UserId != currentUser.OId)
                {
                    continue;
                }
                var currentUserLeaderBoard = new CurrentUserLeaderBoardViewModel()
                {
                    TotalPoint = await GetUserPoint(user.OId, request.FieldId),
                    UserAvatar = user.AvatarHash,
                    UserName   = $"{user.FirstName} {user.LastName}",
                    UserId     = user.OId
                };
                result.CurrentUser = currentUserLeaderBoard;
            }

            result.LeaderBoards = result.LeaderBoards.OrderByDescending(x => x.TotalPoint).ToList();
            var iter = 1;

            foreach (var item in result.LeaderBoards)
            {
                item.Index = iter++;
                if (result.CurrentUser.UserId == item.UserId)
                {
                    result.CurrentUser.Index = item.Index;
                }
            }
            return(result);
        }
        public LeaderBoardViewModel Get(LeaderBoardRequest request)
        {
            var scores = session
                .Query<Score, ScoreBoardIndex>()
                .Take(1024)
                .As<ScoreDisplay>()
                .ToList()
                .GroupBy(s => s.Athlete.Id);

            var events = session.Query<Event>().OrderBy(e => e.Number).ToList();

            var scoreRows = CompileScoresIntoRows(events, scores).ToList();

            return new LeaderBoardViewModel
                   {
                       Events = events,
                       Scores = scoreRows
                   };
        }
Пример #4
0
        public async Task <IActionResult> GetLeaderBoard([FromQuery] LeaderBoardRequest request)
        {
            var data = await levelService.GetLeaderBoard(request);

            return(Ok(new ApiOkResponse(data)));
        }