Example #1
0
        public async Task <IEnumerable <LeaderboardsDto> > GetLeaderboardsAsync()
        {
            var result = new List <LeaderboardsDto>();

            var leagues = await _context.Leagues
                          .Include(l => l.Seasons).ThenInclude(s => s.Matchdays).ThenInclude(md => md.Matches).ThenInclude(m => m.Predictions).ThenInclude(p => p.User)
                          .ToListAsync();

            foreach (var league in leagues)
            {
                foreach (var season in league.Seasons)
                {
                    var leaderboardDto = new LeaderboardsDto {
                        Title = $"{league.Title} {season.Title}"
                    };

                    var seasonMatchIds = season.Matchdays.SelectMany(md => md.Matches).Select(m => m.Id);
                    var predictions    = await _context.Predictions.Where(p => seasonMatchIds.Contains(p.MatchId)).ToListAsync();

                    var orderedGroupedPredictions = predictions.GroupBy(p => p.User.Username);

                    var ranks = new List <RankDto>();
                    foreach (var orderedGroupedPrediction in orderedGroupedPredictions)
                    {
                        var rank = new RankDto
                        {
                            User               = orderedGroupedPrediction.Key,
                            TotalPoint         = orderedGroupedPrediction.Sum(grp => grp.Point.GetValueOrDefault()),
                            TotalGame          = orderedGroupedPrediction.Count(grp => grp.Point != null),
                            TotalCorrectScore  = orderedGroupedPrediction.Count(grp => grp.Point == 3),
                            TotalCorrectResult = orderedGroupedPrediction.Count(grp => grp.Point == 1),
                            TotalWrong         = orderedGroupedPrediction.Count(grp => grp.Point == 0)
                        };

                        ranks.Add(rank);
                    }

                    leaderboardDto.Ranks = ranks
                                           .OrderByDescending(r => r.TotalPoint)
                                           .ThenByDescending(r => r.WinningRate)
                                           .ThenByDescending(r => r.TotalCorrectScore)
                                           .ThenByDescending(r => r.TotalCorrectResult)
                                           .ThenBy(r => r.TotalGame)
                                           .ThenBy(r => r.User);

                    var idx = 0;
                    leaderboardDto.Ranks.ToList().ForEach(r => r.Sequence = ++idx);

                    result.Add(leaderboardDto);
                }
            }

            return(result);
        }
Example #2
0
        public RankDto Create(RankDto data)
        {
            var rank = Mapper.Map <Rank>(data);

            var result = _repoRank.Create(rank);

            if (_repoRank.SaveChanges() > 0)
            {
                return(Mapper.Map <RankDto>(result));
            }
            return(null);
        }
Example #3
0
        /// <inheritdoc/>
        public void CreateRank(IRank rank)
        {
            RankDto rankDto = RankDto.ToDto(rank);

            this.Context.Ranks.Add(rankDto);
            int count = this.Context.SaveChanges();

            if (count != 1)
            {
                throw new ApplicationException($"Unexpectedly created {count} rows");
            }
        }
        public ActionResult CreateRank(CreateRankViewModel data)
        {
            var path    = Server.MapPath("~/Images");
            var rankdto = new RankDto()
            {
                CreatedDate = DateTime.Now,
                RankName    = data.RankName,
                RankImage   = "../Images/" + FileUlti.SaveFile(data.RankImage, path)
            };

            _rankService.Create(rankdto);

            return(RedirectToAction("RankManagement"));
        }
Example #5
0
 public int Updated(RankDto data)
 {
     throw new NotImplementedException();
 }