public async Task <IActionResult> GetFilmesAsync([FromQuery] FilmesGet filmesGet) { Pesquisa pesquisa = Mapper.Map <FilmesGet, Pesquisa>(filmesGet); IEnumerable <Filme> filmes = await filmesService.ObterFilmesAsync(pesquisa); IEnumerable <FilmesGetResult> filmesGetResults = Mapper.Map <IEnumerable <Filme>, IEnumerable <FilmesGetResult> >(filmes); return(Ok(filmesGetResults)); }
public async Task <IActionResult> GetFilmesAsync([FromQuery] FilmesGet filmesGet) { ValidationHelper.ThrowValidationExceptionIfNotValid(filmesGet); logger.LogInformation("Realizando chamada ao TMDb com os seguintes " + "criterios de pesquisa: {@CriteriosPesquisa}", filmesGet); IEnumerable <FilmesGetResult> resultado = await tmdbAdapter.GetFilmesAsync(filmesGet); logger.LogInformation("Chamada ao TMDb concluida com sucesso."); return(Ok(resultado)); }
public async Task <IEnumerable <FilmesGetResult> > GetFilmesAsync(FilmesGet filmesGet) { try { var cacheKey = $"filmes::{filmesGet.TermoPesquisa}::" + $"{filmesGet.AnoLancamento}::{tmdbAdapterConfiguration.Idioma}"; if (!typedCache.TryGet(cacheKey, out TmdbSearchMoviesGetResult tmdbSearchMoviesGetResult)) { var tmdbSearchMoviesGet = Mapper.Map <TmdbSearchMoviesGet>(filmesGet); tmdbSearchMoviesGet.ApiKey = tmdbAdapterConfiguration.TmdbApiKey; tmdbSearchMoviesGet.Language = tmdbAdapterConfiguration.Idioma; tmdbSearchMoviesGetResult = await tmdbApi.SearchMovies(tmdbSearchMoviesGet); typedCache.Set(cacheKey, tmdbSearchMoviesGetResult, TimeSpan.FromSeconds(tmdbAdapterConfiguration.TempoDeCacheDaPesquisaEmSegundos)); } return(Mapper.Map <IEnumerable <FilmesGetResult> >(tmdbSearchMoviesGetResult.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; } }