Пример #1
0
        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));
        }
Пример #2
0
        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));
        }