public virtual async Task <string> GetDynamicContentHtmlAsync(string storeId, string placeholderName) { string htmlContent = null; //TODO: make full context var evaluationContext = new DynamicContentEvaluationContext { StoreId = storeId, PlaceName = placeholderName }; var cacheKey = CacheKey.With(GetType(), "GetDynamicContentHtmlAsync", storeId, placeholderName); return(await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { cacheEntry.AddExpirationToken(MarketingCacheRegion.CreateChangeToken()); cacheEntry.AddExpirationToken(_apiChangesWatcher.CreateChangeToken()); var dynamicContentItems = (await _dynamicContentApi.EvaluateDynamicContentAsync(evaluationContext)).Select(x => x.ToDynamicContentItem()); if (dynamicContentItems != null) { var htmlContentSpec = new HtmlDynamicContentSpecification(); var htmlDynamicContent = dynamicContentItems.FirstOrDefault(htmlContentSpec.IsSatisfiedBy); if (htmlDynamicContent != null) { var dynamicProperty = htmlDynamicContent.DynamicProperties.FirstOrDefault(htmlContentSpec.IsSatisfiedBy); if (dynamicProperty != null && dynamicProperty.Values.Any(v => v.Value != null)) { htmlContent = dynamicProperty.Values.First().Value.ToString(); } } } return htmlContent; })); }
public virtual async Task EvaluateDiscountsAsync(PromotionEvaluationContext context, IEnumerable <IDiscountable> owners) { var cacheKey = CacheKey.With(GetType(), "EvaluateDiscountsAsync", context.GetCacheKey()); var rewards = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { cacheEntry.AddExpirationToken(MarketingCacheRegion.CreateChangeToken()); cacheEntry.SetAbsoluteExpiration(TimeSpan.FromMinutes(1)); var contextDto = context.ToPromotionEvaluationContextDto(); return(await _promiotionApi.EvaluatePromotionsAsync(contextDto)); }); ApplyRewards(rewards, owners); }
public virtual async Task <IEnumerable <DynamicContentItem> > EvaluateDynamicContentItemsAsync(DynamicContentEvaluationContext evalContext) { var cacheKey = CacheKey.With(GetType(), "EvaluateDynamicContentItemsAsync", evalContext.GetCacheKey()); return(await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { cacheEntry.AddExpirationToken(MarketingCacheRegion.CreateChangeToken()); cacheEntry.AddExpirationToken(_apiChangesWatcher.CreateChangeToken()); var evalContextDto = evalContext.ToDynamicContentEvaluationContextDto(); var dynamicContentItems = (await _dynamicContentApi.EvaluateDynamicContentAsync(evalContextDto)).Select(x => x.ToDynamicContentItem()); return dynamicContentItems; })); }
public virtual async Task EvaluateDiscountsAsync(PromotionEvaluationContext context, IEnumerable <IDiscountable> owners) { var cacheKey = CacheKey.With(GetType(), "EvaluateDiscountsAsync", context.GetCacheKey()); var rewards = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { cacheEntry.AddExpirationToken(MarketingCacheRegion.CreateChangeToken()); //Workaround: Use lifetime for promotions from ChangesPollingInterval setting to be able manage this value cacheEntry.SetAbsoluteExpiration(_storefrontOptions.ChangesPollingInterval); var contextDto = context.ToPromotionEvaluationContextDto(); return(await _promiotionApi.EvaluatePromotionsAsync(contextDto)); }); ApplyRewards(rewards, owners); }
public ActionResult ResetCache() { //TODO: Replace to some other (maybe with using reflection) ThemeEngineCacheRegion.ExpireRegion(); CartCacheRegion.ExpireRegion(); CatalogCacheRegion.ExpireRegion(); ContentBlobCacheRegion.ExpireRegion(); CustomerCacheRegion.ExpireRegion(); MarketingCacheRegion.ExpireRegion(); PricingCacheRegion.ExpireRegion(); QuoteCacheRegion.ExpireRegion(); RecommendationsCacheRegion.ExpireRegion(); StaticContentCacheRegion.ExpireRegion(); StoreCacheRegion.ExpireRegion(); TaxCacheRegion.ExpireRegion(); SubscriptionCacheRegion.ExpireRegion(); SecurityCacheRegion.ExpireRegion(); return(StoreFrontRedirect("~/")); }