예제 #1
0
        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));
        }
예제 #2
0
        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));
        }
예제 #3
0
        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;
            }
        }