public async Task <IActionResult> GetMatchData(string url, int id, int team1Id, int team2Id, int TournamentId, int TournamentLevel) { // ------------------------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------------------------ // --------------------- Test pobieranie spreparowanego pliku json, o nazwie game(url).json [url od 1 do 28] -------------------- // -------------------------------------- https://localhost:44344/PreparedGames/game1.json -------------------------------------- // ------------------------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------------------------ //var cuttedUrl = url.Substring(69, 10); //var matchId = Int32.Parse(cuttedUrl); //int liczbaGraczy = 10; var cuttedUrl = url; var matchId = Int32.Parse(cuttedUrl); int liczbaGraczy = 2; if (_matchRepository.Matches.Where(m => m.gameid == matchId).Any()) { // Mecz o tym id znajduje się już w bazie. return(RedirectToAction("Index")); } MatchDto result = null; // mecze testowe przyjmują wartość ID nie większą niż 2k, reszta to dane z RiotGamesAPI if (matchId > 1000 && matchId < 20000) { // Wygenerowanie losowych wartości dla meczu x, z druzyna 1 i 2 result = _riotApiService.CreateAndReturnMatchDataBasedOnId(matchId, team1Id, team2Id); } else { // pobranie danych z RiotGamesAPI result = await _riotApiService.GetMatchDataBasedOnId(Int32.Parse(cuttedUrl)); } // musze to wrzucić do interfejsu, potem przemapowane dane {tylko intersujące nas dane} są zapisywane w bazie // mimo to i tak potem jeszcze rozdzielam je dla drużyn i graczy MatchSelectedData newMatch5v5 = new MatchSelectedData { gameid = result.gameid, seasonId = result.seasonId, queueId = result.queueId, gameType = result.gameType, participantIdentities = result.participantIdentities .Select(i => new ParticipantIdentity { participantId = i.participantId, playerInfo = new PlayerInfo { participantId = i.participantId, summonerName = i.player.summonerName, platformId = i.player.platformId, currentAccountId = i.player.currentAccountId, summonerId = i.player.summonerId, accountId = i.player.accountId } }).ToList(), gameDuration = result.gameDuration, gameMode = result.gameMode, mapId = result.mapId, participants = result.participants .Select(p => new Participant { participantId = p.participantId, teamId = p.teamId, highestAchievedSeasonTier = p.highestAchievedSeasonTier, championId = p.championId, spell1Id = p.spell1Id, spell2Id = p.spell2Id, stats = new Stats { ParticipantId = p.stats.ParticipantId, Kills = p.stats.Kills, Deaths = p.stats.Deaths, Assists = p.stats.Assists, Win = p.stats.Win } }).ToList() }; //zapisywanie danych pobranych z RiotAPI do lokalnej bazy, musze się zastanowić czy to jest mi wogole potrzebne na stałe w bazie czy nie lepiej cały czas pytać o to api _matchRepository.SaveMatch(newMatch5v5); // Pętla uaktualniająca baze dla wszystkich graczy biorących udział w grze for (int INDEX = 1; INDEX <= liczbaGraczy; INDEX++) { long SummonerId = newMatch5v5.participantIdentities.Where(p => p.participantId == INDEX) .Select(p => p.playerInfo.summonerId) .FirstOrDefault(); int ParticipantId = newMatch5v5.participantIdentities .Where(p => p.participantId == INDEX) .Where(p => p.playerInfo.summonerId == SummonerId) .Select(p => p.participantId) .FirstOrDefault(); GameStatistic gameStatistic = new GameStatistic { MatchSelectedData = _matchRepository.Matches .Where(m => m.Id == newMatch5v5.Id).First(), Win = newMatch5v5.participants .Where(p => p.participantId == ParticipantId) .Select(p => p.stats.Win).First(), SummonerName = newMatch5v5.participantIdentities .Where(p => p.participantId == ParticipantId) .Select(p => p.playerInfo.summonerName).First(), SummonerId = newMatch5v5.participantIdentities .Where(p => p.participantId == ParticipantId) .Select(p => p.playerInfo.summonerId).First(), AccountId = newMatch5v5.participantIdentities .Where(p => p.participantId == ParticipantId) .Select(p => p.playerInfo.accountId).First(), Summoner = _repository.SummonerInfos .Where(p => p.id == newMatch5v5.participantIdentities .Where(m => m.participantId == ParticipantId) .Select(s => s.playerInfo.summonerId).First()) .First(), Kills = newMatch5v5.participants .Where(p => p.participantId == ParticipantId) .Select(p => p.stats.Kills).First(), Deaths = newMatch5v5.participants .Where(p => p.participantId == ParticipantId) .Select(p => p.stats.Deaths).First(), Assists = newMatch5v5.participants .Where(p => p.participantId == ParticipantId) .Select(p => p.stats.Assists).First(), ChampionId = newMatch5v5.participants .Where(p => p.participantId == ParticipantId) .Select(p => p.championId).First(), TeamId = newMatch5v5.participants .Where(p => p.participantId == ParticipantId) .Select(p => p.teamId).First(), GameMode = newMatch5v5.gameMode, GameId = newMatch5v5.gameid, GameDuration = newMatch5v5.gameDuration, DatePlayed = DateTime.Now }; //iteracyjne dodawanie statystyk dla każdego gracza biorącego udział w meczu, posiadającego konto w LOLHaven _matchRepository.AddStatsForEachPlayers(gameStatistic); } //Przekierowanie do akcji aktualizującej statystyki return(RedirectToAction("UploadGameStats", "Tournament", new { id, team1Id, team2Id, TournamentId, TournamentLevel })); }