private Player CollectPlayerData(DataManager dataManager, OpenDotaClient openDota, long playerId) { var info = openDota.Player(playerId); if (info == null) { return(null); } var player = dataManager.Players .Add(new Player { Id = playerId }) .Entity; // основное инфо player.Name = info.profile.personaname; player.SteamId = info.profile.steamid; player.SoloRank = info.solo_competitive_rank; player.PartyRank = info.competitive_rank; player.RankTier = info.rank_tier; // матчи var matches = GetMatches(openDota, player); if (matches.Count > 0) { dataManager.Matches.AddRange(matches); var latest = matches.OrderByDescending(x => x.MatchId).First(); player.LastMatchId = latest.MatchId; player.LastMatchDate = latest.DateStart + latest.Duration; } player.WinCount = matches.Count(x => x.Won); player.LoseCount = matches.Count(x => !x.Won); // рейтинги var ratings = GetRatings(openDota, player); if (ratings.Count > 0) { dataManager.Ratings.AddRange(ratings); player.LastRatingDate = ratings.Max(x => x.Date); } return(player); }
private void InfoThreadFunc(object state) { using var scope = serviceScopeFactory.CreateScope(); var dataManager = scope.ServiceProvider.GetRequiredService <DataManager>(); var players = dataManager.Players.ToList(); foreach (var player in players) { var info = openDota.Player(player.Id); if (info != null) { player.Name = info.profile.personaname; player.SteamId = info.profile.steamid; player.SoloRank = info.solo_competitive_rank; player.PartyRank = info.competitive_rank; player.RankTier = info.rank_tier; dataManager.SaveChanges(); } } }