public async Task <Maybe <PagedResult <TResult> > > GetFilteredCollectionUsingCacheAsync <TResult, TQuery>( TQuery query, string endpoint, string cacheKey = null, TimeSpan?expiry = null) where TResult : class where TQuery : class, IPagedQuery { Logger.Debug($"Get filtered collection of data from cache... endpoint: {endpoint}, cacheKey: {cacheKey}, queryType: {typeof(TQuery).Name}"); var filter = _filterResolver.Resolve <TResult, TQuery>(); var results = await GetFromCacheAsync <IEnumerable <TResult> >(endpoint, cacheKey); if (results.HasValue && results.Value.Any()) { return(FilterAndPaginateResults(filter, results, query)); } Logger.Debug($"Get filtered collection of data from storage, endpoint: {endpoint}, queryType: {typeof(TQuery).Name}"); var queryString = endpoint.ToQueryString(query); results = await GetAsync <IEnumerable <TResult> >(queryString); if (results.HasNoValue || !results.Value.Any()) { return(PagedResult <TResult> .Empty); } Logger.Debug($"Store missing collection in cache, endpoint: {endpoint}, cacheKey: {cacheKey}, expiry: {expiry}, type: {typeof(TResult).Name}"); await StoreInCacheAsync(results, endpoint, cacheKey, expiry); return(FilterAndPaginateResults(filter, results, query)); }
public async Task <Maybe <PagedResult <TResult> > > GetFilteredCollectionUsingCacheAsync <TResult, TQuery>( TQuery query, string endpoint, string cacheKey = null, TimeSpan?expiry = null) where TResult : class where TQuery : class, IPagedQuery { var filter = _filterResolver.Resolve <TResult, TQuery>(); var results = await GetFromCacheAsync <IEnumerable <TResult> >(endpoint, cacheKey); if (results.HasValue && results.Value.Any()) { return(FilterAndPaginateResults(filter, results, query)); } results = await GetAsync <IEnumerable <TResult> >(GetEndpointWithQuery(endpoint, query)); if (results.HasNoValue || !results.Value.Any()) { return(PagedResult <TResult> .Empty); } await StoreInCacheAsync(results, endpoint, cacheKey, expiry); return(FilterAndPaginateResults(filter, results, query)); }