Пример #1
0
        public async Task <IActionResult> RecalculateToNewElo()
        {
            //reset to default value
            var players = await blobClient.GetPlayers();

            foreach (var player in players)
            {
                player.Elo = 1000;
            }

            await blobClient.UpdatePlayers(players);

            var matches = await blobClient.GetMatches();

            foreach (var match in matches.OrderBy(m => m.Date))
            {
                await blobClient.RemoveMatch(match);

                var newPlayers = await blobClient.GetPlayers();

                var teamElo = 0;
                foreach (var player in match.Winner.Players)
                {
                    player.Elo = newPlayers.First(p => p.Id == player.Id).Elo;
                    teamElo   += player.Elo;
                }

                match.Winner.TeamElo = teamElo / match.Winner.Players.Count;

                teamElo = 0;
                foreach (var player in match.Looser.Players)
                {
                    player.Elo = newPlayers.First(p => p.Id == player.Id).Elo;
                    teamElo   += player.Elo;
                }

                match.Looser.TeamElo = teamElo / match.Looser.Players.Count;

                await blobClient.AddMatch(match);

                var eloResult = eloCalulator.CalculateFifaElo(match);

                foreach (var player in match.Winner.Players)
                {
                    var newPlayerWinner = newPlayers.First(np => np.Id == player.Id);
                    newPlayerWinner.Elo += (int)eloResult.WinnerPointChange;
                }

                foreach (var player in match.Looser.Players)
                {
                    var newPlayerLooser = newPlayers.First(np => np.Id == player.Id);
                    newPlayerLooser.Elo += (int)eloResult.LooserPointChange;
                }

                await blobClient.UpdatePlayers(newPlayers);
            }

            return(RedirectToAction("Index", "Home"));
        }