Exemplo n.º 1
0
        public async Task ImportLeagueFromApiAsync(string leagueCode)
        {
            var competitionAlreadyImported = await _competitionRepository.ExistsAsync(c => leagueCode.Equals(c.LeagueCode));

            if (competitionAlreadyImported)
            {
                throw new CompetitionAlreadyImportedException($"Competition with code '{leagueCode}' is already imported");
            }

            var competition = await _footballClient.GetCompetitionByLeagueCodeAsync(leagueCode);

            if (competition == null)
            {
                throw new CompetitionNotFoundException($"Competition with code '{leagueCode}' was not found");
            }

            var teams = (await _footballClient.GetTeamsByCompetition(competition)).ToList();

            await _competitionRepository.CreateAsync(competition);

            await _teamRepository.AddNonExistingTeamsAsync(teams);

            await _competitionRepository.AddTeamsForCompetitionAsync(competition, teams);

            foreach (var team in teams)
            {
                try
                {
                    // todo: these can be done in parallel, maybe
                    var players = await _footballClient.GetPlayersByTeamAsync(team);

                    await _playerRepository.AddPlayersToTeamAsync(team, players.ToList());
                }
                catch (RequestNumberLimitExceededException)
                {
                    // too many requests
                    _log.Warn($"Exceeded number of request when importing players for teamId {team.Id}");
                    break;
                    // todo: enqueue teams to be handled by another process
                }
            }
        }