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)); }
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); }