public async Task <bool> InsertAchievement(UserAchievementForm form) { var achievement = new AchievementEntity { Id = Guid.NewGuid(), UserId = form.UserId, Achievement = form.Achievement, AchievedDate = form.Date, AchievedTeam = form.TeamName }; return(await _achievementRepository.InsertAsync(new List <AchievementEntity> { achievement })); }
private async Task <bool> UpdateStatsAsync(MatchSubmissionView view, SummonerInfoEntity userPlayer) { var divisionTask = _scheduleService.GetDivisionIdByScheduleAsync(view.ScheduleId); var matchesTask = _matchDetailRepository.ReadForScheduleId(view.ScheduleId); var seasonInfo = await _seasonInfoRepository.GetCurrentSeasonAsync(); var registeredPlayersTask = _summonerInfoRepository.GetAllValidSummonersAsync(); var previousListedMvpsTask = _matchMvpRepository.ReadAllForTeamScheduleId(view.ScheduleId); var registeredPlayers = (await registeredPlayersTask).ToDictionary(x => x.SummonerName.ToLowerInvariant(), x => x); var matchDictionary = (await matchesTask); var mvpDetails = (await previousListedMvpsTask).OrderBy(x => x.Game).ToDictionary(x => x.Game, x => x); var divisionId = await divisionTask; var insertMvpDetails = new List <MatchMvpEntity>(); var updateMvpDetails = new List <MatchMvpEntity>(); //Will always insert new records and never update, we will delete any old records first var insertDetailsList = new List <MatchDetailEntity>(); var insertStatsList = new List <PlayerStatsEntity>(); var championDetails = new List <ChampionStatsEntity>(); var insertAchievementsList = new List <AchievementEntity>(); //List of Ids to hard delete foreach (var gameInfo in view.GameInfos) { if (gameInfo.HomeTeamForfeit || gameInfo.AwayTeamForfeit) { continue; } //matchhistory.na.leagueoflegends.com/en/#match-details/NA1/{match id}/{dont care}?tab=overview var split = gameInfo.MatchHistoryLink.Split("/"); //If an invalid match was submitted, will fail the entire process if (!uint.TryParse(split[6], out var matchId)) { return(false); } var version = (await GlobalVariables.ChampsApi.Versions.GetAllAsync()).First(); var championsTask = GlobalVariables.ChampsApi.Champions.GetAllAsync(version); var riotMatchTask = GlobalVariables.Api.Match.GetMatchAsync(RiotSharp.Misc.Region.Na, matchId); var riotMatch = await riotMatchTask; var champions = await championsTask; CollectBans(view, riotMatch, champions, seasonInfo, divisionId, championDetails); var gameDuration = riotMatch.GameDuration; var matchList = new List <MatchDetailContract>(); await CollectPlayerMatchDetailsAsync(view, riotMatch, champions, gameInfo, registeredPlayers, gameDuration, seasonInfo, matchDictionary, matchList, divisionId, championDetails); CollectMatchMvpData(view, matchList, registeredPlayers, gameInfo, mvpDetails, updateMvpDetails, insertMvpDetails, userPlayer); insertDetailsList.AddRange(matchList.Select(x => x.MatchDetail)); insertStatsList.AddRange(matchList.Select(x => x.PlayerStats)); insertAchievementsList.AddRange(matchList.SelectMany(x => x.Achievements)); } if (!await DeleteOldRecords(view)) { return(false); } var insertAchievementsResult = await _achievementRepository.InsertAsync(insertAchievementsList); var insertMvpResult = await _matchMvpRepository.CreateAsync(insertMvpDetails); var updateMvpResult = await _matchMvpRepository.UpdateAsync(updateMvpDetails); var insertStatsResult = await _playerStatsRepository.InsertAsync(insertStatsList); var insertDetailsResult = await _matchDetailRepository.InsertAsync(insertDetailsList); var insertChampionStatsResult = await _championStatsRepository.CreateAsync(championDetails); return(insertStatsResult && insertDetailsResult && insertMvpResult && updateMvpResult && insertChampionStatsResult && insertAchievementsResult); }