コード例 #1
0
        public IActionResult Index(CreateGameResultDto dto)
        {
            if (dto.BlackPlayerId == dto.WhitePlayerId)
            {
                return(RedirectToAction("Index"));
            }

            string message = null;

            sessionFactory.Execute(s =>
            {
                var whitePlayer = ratingRepository.GetPlayerById(s, dto.WhitePlayerId);
                var blackPlayer = ratingRepository.GetPlayerById(s, dto.BlackPlayerId);
                var whiteRating = whitePlayer.Points;
                var blackRating = blackPlayer.Points;


                var result = new GameResult(whitePlayer, blackPlayer, dto.Winner);
                ratingRepository.SaveGameResult(s, result);

                ratingRepository.UpdatePlayerDecipoints(s, whitePlayer);
                ratingRepository.UpdatePlayerDecipoints(s, blackPlayer);

                var allGames  = ratingRepository.GetGameResults(s).ToList();
                var pairGames = allGames
                                .Where(x => x.WhitePlayerId == whitePlayer.Id && x.BlackPlayerId == blackPlayer.Id ||
                                       x.WhitePlayerId == blackPlayer.Id && x.BlackPlayerId == whitePlayer.Id
                                       )
                                .ToList();

                message = $@"{whitePlayer.Name} vs {blackPlayer.Name}... {dto.Winner.EnumDisplayNameFor()}! Личный счёт {pairGames.Sum(x=>x.GetPlayerScore(whitePlayer.Id))}:{pairGames.Sum(x => x.GetPlayerScore(blackPlayer.Id))}
{whitePlayer.Name} {whiteRating} -> {whitePlayer.Points}
{blackPlayer.Name} {blackRating} -> {blackPlayer.Points} ";

                var players = new[] { whitePlayer, blackPlayer };
                foreach (var player in players)
                {
                    if (player.Insignias == null)
                    {
                        player.Insignias = "";
                    }
                    foreach (var insignia in InsigniasService.Insignias)
                    {
                        if (player.Insignias.Contains(insignia.Key) == false && insignia.Value.Func(result, player, players.Single(x => x != player), allGames))
                        {
                            player.Insignias += insignia.Key + ";";
                            message          += $@"
{player.Name} получает орден {insignia.Key} «{insignia.Value.Name}» {insignia.Value.SlackEmoji}! ";
                            ratingRepository.UpdatePlayerInsignias(s, player);
                        }
                    }
                }
            });

            slackService.SendMessage(message);

            return(RedirectToAction("Index"));
        }