static void Main(string[] args) { // delete all ratings and stats Console.WriteLine("Delete all ratings"); PlayerHandler.DeleteAllPlayerSeasons(); RatingHandler.DeleteAllRatings(); // get all games in chronological order Console.WriteLine("Get games"); var games = GameHandler.GetGamesAfter(int.MinValue, SortOrder.Ascending); // calculate new ratings Console.WriteLine($"Calculate new ratings for {games.Count} games"); var completed = 0; foreach (var game in games) { Ratings.CalculateNewRatings(game); ++completed; Console.Write($"\rProgress: {completed}/{games.Count} ({completed / (double)games.Count:P1})"); } Console.WriteLine(); }
public bool PostGame([FromBody] GameResult gameResult) { try { ValidateGameResult(gameResult); var winningPlayer = GetOrCreatePlayer(gameResult.Winner); var losingPlayer = GetOrCreatePlayer(gameResult.Loser); var game = GameHandler.AddGame(new Models.Game { Scores = new List <GameScore> { new GameScore { PlayerId = winningPlayer.Id, Score = 1.0 }, new GameScore { PlayerId = losingPlayer.Id, Score = 0.0 } } }); Ratings.CalculateNewRatings(game); return(true); } catch (Exception /*ex*/) { return(false); } }
public bool DeleteGame(int id) { try { // get the game var game = GameHandler.GetGame(id); if (game == null) { throw new ArgumentException("No such game"); } // delete the game (incl game scores and player ratings) GameHandler.DeleteGame(game); // delete ratings from later games RatingHandler.DeleteRatingsAfter(game.PlayerRatings[0].Id, deleteDefaultRatings: false); // reset current ratings in PlayerSeasons var lastPlayerRatings = RatingHandler.GetLatestRatingsPerPlayerSeason(); var updatedPlayerSeasons = lastPlayerRatings .Where(pr => !pr.PlayerSeason.Season.HasEnded(game.Created)) // current and future seasons .Select(pr => { var playerSeason = pr.PlayerSeason; playerSeason.Season = null; playerSeason.Rating = pr.Rating; playerSeason.RatingChange = pr.RatingChange; playerSeason.Wins = pr.Wins; playerSeason.Losses = pr.Losses; playerSeason.CurrentStreak = pr.CurrentStreak; return(playerSeason); }) .ToList(); PlayerHandler.UpdatePlayerSeasons(updatedPlayerSeasons.Where(ps => ps.GamesPlayed > 0)); PlayerHandler.DeletePlayerSeasons(updatedPlayerSeasons.Where(ps => ps.GamesPlayed == 0)); // get all games after the deleted game var games = GameHandler.GetGamesAfter(game.Id, SortOrder.Ascending); // recalculate ratings games.ForEach(g => Ratings.CalculateNewRatings(g)); // delete players with no games var players = PlayerHandler.GetAllPlayers() .Where(p => p.Seasons.Count == 0); PlayerHandler.DeletePlayers(players); return(true); } catch (Exception /*ex*/) { return(false); } }