public async Task <IRanksMap> GetRanksMapAsync(int year, Gender gender, AgeGroup ageGroup, CancellationToken cancellationToken)
        {
            string key = CreateKey(year, gender, ageGroup);

            if (rankMaps.TryGetValue(key, out IRanksMap value))
            {
                return(value);
            }

            IRanksMap newRankMap = await RanksMap.CreateAsync(year, gender, ageGroup, cancellationToken);

            rankMaps.Add(key, newRankMap);
            return(newRankMap);
        }
Example #2
0
        public async Task <List <Player> > GetPlayersAsync(string tournamentId, int categoryId, string categoryName, CancellationToken cancellationToken)
        {
            List <HtmlNode> htmlPlayers = await GetTournamentPlayersNodes(categoryId, tournamentId, cancellationToken);

            IRanksMap ranks             = null;
            IRanksMap previousYearRanks = null;

            if (htmlPlayers.Any())
            {
                Gender   gender   = GetGender(categoryName);
                AgeGroup ageGroup = GetAgeGroup(categoryName);

                ranks = await this.rankDb.GetRanksMapAsync(DateTime.UtcNow.Year, gender, ageGroup, cancellationToken);

                previousYearRanks = await this.rankDb.GetRanksMapAsync(2018, gender, ageGroup, cancellationToken);
            }

            List <Player> players = new List <Player>();

            for (int i = 0; i < htmlPlayers.Count; i++)
            {
                HtmlNode playerRowNode  = htmlPlayers[i];
                HtmlNode playerNameNode = playerRowNode.Descendants("a").FirstOrDefault();

                if (playerNameNode == null)
                {
                    continue;
                }

                string name     = HttpUtility.HtmlDecode(playerNameNode.InnerText);
                string playerId = playerNameNode.Attributes["href"].Value.Split('(')[1].Split(')')[0];

                int    associationIndex = i % 2 == 0 ? 2 : 1;
                var    columnDes        = playerRowNode.Descendants("td").ToList();
                string association      = HttpUtility.HtmlDecode(columnDes[associationIndex].InnerText);
                int    age = int.Parse(HttpUtility.HtmlDecode(columnDes[associationIndex + 1].InnerText));

                double rank             = ranks.GetRank(name, association, age);
                double previousYearRank = previousYearRanks.GetRank(name, association, age);


                Player player = new Player(name, playerId, rank, previousYearRank, association, age);
                players.Add(player);
            }

            return(players);
        }