Esempio n. 1
0
        public IEnumerable <Head2HeadRecord> GetHead2HeadRecords(
            [FromRoute(Name = "player")] string playerName,
            [FromRoute(Name = "season")] string seasonName)
        {
            var player = PlayerHandler.GetPlayerByName(playerName);
            var season = SeasonHandler.GetSeason(seasonName);

            if (player == null || season == null)
            {
                return(new Head2HeadRecord[0]);
            }

            var games = GameHandler
                        .GetGamesByPlayer(playerName, SortOrder.Descending)
                        .FindAll(g => season.IsActive(g.Created));

            var ratings = RatingHandler.GetRatingsByPlayerAndSeason(player, season)
                          .Where(pr => pr.GameId != null)
                          .ToDictionary(pr => pr.GameId);

            return(games
                   .SelectMany(g => g.Scores.Where(gs => gs.Player.Name != playerName))
                   .GroupBy(gs => gs.Player) // group by opponent
                   .Select(g => new Head2HeadRecord
            {
                Opponent = g.Key.Name,
                Wins = g.Count(gs => gs.Loss),                                          // player's wins are losses for opponent
                Losses = g.Count(gs => gs.Win),                                         // player's losses are wins for opponent
                RatingChange = Math.Round(g.Sum(gs => ratings[gs.GameId].RatingChange)) // summing player's rating changes
            })
                   .OrderBy(h2h => h2h.Opponent));
        }
Esempio n. 2
0
        static bool AddSeasonIfNotExists(string name, DateTimeOffset startDate, DateTimeOffset endDate)
        {
            if (SeasonHandler.GetSeason(name) != null)
            {
                Console.WriteLine($"Season {name} already exists");
                return(false);
            }

            Console.WriteLine($"Add {name} season from {startDate} to {endDate}");
            SeasonHandler.AddSeason(new Season
            {
                Name      = name,
                StartDate = startDate,
                EndDate   = endDate
            });

            return(true);
        }