Ejemplo n.º 1
0
        public async Task <IEnumerable <Filme> > GetFilmesAsync(
            Pesquisa pesquisa, string idioma)
        {
            try
            {
                var cacheKey = $"filmes::{pesquisa.TermoPesquisa}::" +
                               $"{pesquisa.AnoLancamento}::{idioma}";

                if (!typedCache.TryGet(cacheKey,
                                       out TmdbSearchMoviesGetResult tmdbSearchMoviesGetResult))
                {
                    var tmdbSearchMoviesGet =
                        mapper.Map <TmdbSearchMoviesGet>(pesquisa);

                    tmdbSearchMoviesGet.ApiKey =
                        tmdbAdapterConfiguration.TmdbApiKey;

                    tmdbSearchMoviesGet.Language = idioma;

                    tmdbSearchMoviesGetResult = await tmdbApi
                                                .SearchMovies(tmdbSearchMoviesGet);

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

                return(mapper
                       .Map <IEnumerable <Filme> >(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;
            }
        }
Ejemplo n.º 2
0
        public async void Test_CacheManagerAsync_GetAsync_ExpiresCache()
        {
            await typedCache.GetAsync <User>("Test_CacheManagerAsync_GetAsync_ExpiresCache", TimeSpan.FromSeconds(1), null);

            await Task.Delay(1500);

            typedCache.TryGet("Test_CacheManagerAsync_GetAsync_ExpiresCache", out User resultFromCache);

            Assert.Null(resultFromCache);
        }
Ejemplo n.º 3
0
        public async Task <IEnumerable <Filme> > GetFilmesAsync(Pesquisa pesquisa)
        {
            var cacheKey = $"filmes::{pesquisa.TermoPesquisa}::{pesquisa.AnoLancamento}";

            if (!typedCache.TryGet(cacheKey, out IEnumerable <TmdbMoviesDto> tmdbMovies))
            {
                var query = @"SELECT Id, Title, Overview, ReleaseDate 
                            FROM Tmdb 
                            WHERE Title like @TermoPesquisa
                                AND ReleaseDate = @AnoLancamento";

                var parametros = new DynamicParameters();

                parametros.Add("TermoPesquisa", $"%{pesquisa.TermoPesquisa}%");
                parametros.Add("AnoLancamento", pesquisa.AnoLancamento);

                tmdbMovies = await dbConnection.QueryAsync <TmdbMoviesDto>(query);

                typedCache.Set(cacheKey, tmdbMovies, TimeSpan.FromSeconds(sqlAdapterConfiguration.SegundosValidadeCacheParametro));
            }

            var filmes = Mapper.Map <IEnumerable <Filme> >(tmdbMovies);

            return(filmes);
        }
Ejemplo n.º 4
0
        public IActionResult GetV11([FromServices] ITypedCache typedCache)
        {
            if (typedCache == null)
            {
                throw new ArgumentNullException(nameof(typedCache));
            }

            var cacheKey = "values";

            // try get cached values
            if (!typedCache.TryGet(cacheKey, out string[] values))