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