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)) }) }; }
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 }; }
public async Task <IActionResult> GetLeaderBoard([FromQuery] LeaderBoardRequest request) { var data = await levelService.GetLeaderBoard(request); return(Ok(new ApiOkResponse(data))); }