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