Beispiel #1
0
        public async Task <IEnumerable <Pessoa> > GetFilmesPorPessoaAsync(
            PesquisaPorPessoa pesquisa, string idioma)
        {
            try
            {
                var cacheKey = $"filmes::pessoas::{pesquisa.TermoPesquisa}::{idioma}";

                if (!typedCache.TryGet(cacheKey,
                                       out TmdbSearchPersonsGetResult tmdbSearchPersonsGetResult))
                {
                    var tmdbSearchPersonsGet =
                        mapper.Map <TmdbSearchPersonsGet>(pesquisa);

                    tmdbSearchPersonsGet.ApiKey =
                        tmdbAdapterConfiguration.TmdbApiKey;

                    tmdbSearchPersonsGet.Language = idioma;

                    tmdbSearchPersonsGetResult = await tmdbApi
                                                 .SearchPersons(tmdbSearchPersonsGet);

                    typedCache.Set(cacheKey, tmdbSearchPersonsGetResult,
                                   TimeSpan
                                   .FromSeconds(
                                       tmdbAdapterConfiguration
                                       .TempoDeCacheDaPesquisaEmSegundos));
                }

                return(mapper
                       .Map <IEnumerable <Pessoa> >(tmdbSearchPersonsGetResult.Results));
            }
            catch (ApiException e)
            {
                switch (e.StatusCode)
                {
                case (HttpStatusCode)429:     // TooManyRequests
                    throw new BuscarFilmesCoreException(
                              BuscarFilmesCoreError.LimiteDeRequisicoesAtingido);
                }

                // Qualquer outro codigo de retorno esta sendo considerado como
                // uma situacao nao prevista.  A excecao sera relancada e caso
                // nao tratada, acarretara em um erro interno.
                // Obs.: Deixar essa excecao sem tratamento, a principio nao eh
                // errado, pois eh uma condicao nao prevista, ou seja,
                // desconhecida. Como este projeto implementa um ponto central
                // de tratamento de erros (por meio das bibliotecas
                // Otc.ExceptionHandler e Otc.Mvc.Filters) este erro sera
                // devidamente registrado (logs) e um identificador do registro
                // sera fornecido na resposta. Note que em ambientes de
                // desenvolvimento, (variavel de ambiente ASPNETCORE_ENVIRONMENT
                // definida como Development) a excecao sera exposta na resposta,
                // no entanto, em ambientes produtivos,
                // apenas o identificador do log do erro sera fornecido.
                throw;
            }
        }
        public async Task <IActionResult> GetFilmesPorPessoaAsync(
            [FromQuery] PessoaGet PessoaGet)
        {
            PesquisaPorPessoa    pesquisa = mapper.Map <PessoaGet, PesquisaPorPessoa>(PessoaGet);
            IEnumerable <Pessoa> Pessoas  = await filmesService
                                            .ObterFilmesPorPessoaAsync(pesquisa);

            IEnumerable <PessoaGetResult> filmesGetResults =
                mapper.Map <IEnumerable <PessoaGetResult> >(Pessoas);

            return(Ok(filmesGetResults));
        }
Beispiel #3
0
        public async Task <IEnumerable <Pessoa> > ObterFilmesPorPessoaAsync(
            PesquisaPorPessoa pesquisa)
        {
            ValidationHelper.ThrowValidationExceptionIfNotValid(pesquisa);

            logger.LogInformation("Realizando chamada ao TMDb com os seguintes " +
                                  "criterios de pesquisa: {@CriteriosPesquisa}",
                                  new { Criterios = pesquisa, configuration.Idioma });

            IEnumerable <Pessoa> resultado = await tmdbAdapter
                                             .GetFilmesPorPessoaAsync(pesquisa, configuration.Idioma);

            logger.LogInformation("Chamada ao TMDb concluida com sucesso.");

            return(resultado);
        }