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)); }
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); }