예제 #1
0
        private dynamic GetProductsByUrlOrKeywordAction(DealFinderContext context)
        {
            dynamic result = null;

            var timer = new TimerProvider(context, "get-url-mapping-data");

            var urlMappingProvider = new UrlMappingProvider();
            var urlMapping         = urlMappingProvider.GetUrlMappingData(context.Url);

            timer.StopTimer();

            if (urlMapping != null && urlMapping.data != null)
            {
                context.ProductName      = urlMapping.data.pagetype == "search" ? urlMapping.data.keyword : null;
                context.PageType         = urlMapping.data.pagetype == "search" ? "search" : "product";
                context.IsDefaultPrice   = urlMapping.data.pagetype == "search" ? true : false;
                context.CachedValue      = urlMapping.data.pagetype == "search" ? context.ProductName : null;
                context.SearchDomainName = urlMapping.data.pagetype == "search" ? string.Format("ac.search.{0}", context.Country.ToLower()) : null;
            }

            if (context.ProductName == null)
            {
                result = GetProductsByUrlAction(context);
            }
            else
            {
                result = GetProductsByKeywordAction(context);
            }

            return(result);
        }
예제 #2
0
        private dynamic GetProductsByKeywordAction(DealFinderContext context)
        {
            var appCachedValue = string.Format("GetProductsByKeyword:{0}:{1}", context.Url, context.CampaignId);
            var products       = new List <CseProductInfo>();
            var pcmInfo        = new CsePcmInfo();

            if (MemoryCache.Default.Get(appCachedValue) == null || context.QaMode == true)
            {
                products = RetrieveProducts(context, out pcmInfo);

                dynamic cacheObject = new
                {
                    products = products,
                    pcm      = pcmInfo
                };

                MemoryCache.Default.Add(appCachedValue, cacheObject, DateTimeOffset.Now.AddHours(4));
            }
            else
            {
                context.Status = 1;

                var cacheOject = (dynamic)MemoryCache.Default[appCachedValue];

                products = cacheOject.products;
                pcmInfo  = cacheOject.pcm;
            }

            context.Currency = pcmInfo.Currency;

            var result = GetResult(context, pcmInfo, products);

            return(result);
        }
예제 #3
0
        private void AddDebugParameters(DealFinderContext context)
        {
            context.AddDebug("Time Stamp", DateTime.Now.ToString());
            context.AddDebug("Url", context.Url);
            context.AddDebug("Trigger", context.CurrentTrigger);
            context.AddDebug("Campaign ID", context.CampaignId);
            context.AddDebug("GUID", context.NewUserId);
            context.AddDebug("Impression ID", context.NewImpressionId);
            context.AddDebug("Domain", context.DomainName);
            context.AddDebug("Is Domain In DataBase?", context.IsDomainInDataBase ? "Yes" : "No");
            context.AddDebug("Page Type", context.PageType);
            context.AddDebug("Country", context.Country);
            context.AddDebug("SKU", context.CachedValue);
            context.AddDebug("SKU in PCM?", context.IsExistInPcm ? "Yes" : "No");
            context.AddDebug("Is Get Site Data Executed?", context.IsGetSiteDataExecuted ? "Yes" : "No");
            context.AddDebug("Is Get Site Data Failed?", context.IsGetSiteDataFailed ? "Yes" : "No");
            context.AddDebug("Product Name", context.ProductName);
            context.AddDebug("Product Price", context.Price.ToString());
            context.AddDebug("Domain Price Rule", context.DomainPriceRule);
            context.AddDebug("Currency", context.Currency);
            context.AddDebug("SKU Optimized By", JsonConvert.SerializeObject(context.CseOptimizationMapping));
            context.AddDebug("Pre Filtered Products", JsonConvert.SerializeObject(context.CseNumberOfRawResults));
            context.AddDebug("Total Offers Available To Display", context.TotalNumberOfOffersToDisplay.ToString());
            context.AddDebug("CSE Call Status", JsonConvert.SerializeObject(context.CseExecutionFailure));

            context.AddDebug("Is Retargeting Enabled", context.IsRetargetingEnabled ? "Yes" : "No");
            context.AddDebug("Is Retargeting Result", context.IsRetargetingResult ? "Yes" : "No");
            context.AddDebug("Is eCommerce Domain", context.IsEcommerceDomain ? "Yes" : "No");
            context.AddDebug("eCommerce Recency", context.EcommerceRecency);
            context.AddDebug("Non eCommerce Recency", context.NonEcommerceRecency);
            context.AddDebug("Non eCommerce Frequency", context.NonEcommerceFrequency);
        }
예제 #4
0
        private List <string> GetDomainTriggersAndCountry(DealFinderContext context)
        {
            var timer     = new TimerProvider(context, "get-domain-triggers");
            var dataTable = CseToMongoEtlProvider.GetDataTable("sp_Get_DomainTrigger",

                                                               new Dictionary <string, object>
            {
                { "Domain", context.DomainName }
            },
                                                               "SQLCacheConnectionString", 60);

            timer.StopTimer();

            timer = new TimerProvider(context, "domain-triggers-match-time");

            var domainTriggers = new List <string>();

            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                domainTriggers.Add((string)dataTable.Rows[i][0]);
                context.Country = dataTable.Rows[i][1] == DBNull.Value ? "US" : (string)dataTable.Rows[i][1];
            }

            timer.StopTimer();

            return(domainTriggers);
        }
예제 #5
0
        private dynamic LogResult(DealFinderContext context, dynamic result)
        {
            int    index         = 0;
            int    totalOffers   = result.products.Count;
            double minOfferPrice = totalOffers == 0 ? 0 : result.products[0].product_price_raw;
            double maxOfferPrice = totalOffers == 0 ? 0 : result.products[result.products.Count - 1].product_price_raw;

            var businessLogerProvider = new BusinessLoggerProvider();

            foreach (var offer in result.products)
            {
                context.Category = offer.category;

                businessLogerProvider.LogImpression(totalOffers.ToString(),
                                                    "0", minOfferPrice.ToString(),
                                                    maxOfferPrice.ToString(), result.price.ToString(),
                                                    context.CachedValue, index.ToString(), offer.product_price_raw.ToString(),
                                                    offer.merchant_id, offer.cse.ToString(),
                                                    offer.product_id, result.keyword, context);

                index++;
            }

            businessLogerProvider.LogImpression(totalOffers.ToString(), totalOffers.ToString(),
                                                "0", "0", result.price.ToString(), context.CachedValue, context.Status == -1 ? "-2" : "-1", "0",
                                                context.Status.ToString(), "0", "0", result.keyword, context);

            return(result);
        }
예제 #6
0
        public dynamic GetProductsByUrl(string url, string campaignId, dynamic cookies, bool qaMode)
        {
            var context = new DealFinderContext(HttpContext.Current)
            {
                Url             = HttpUtility.UrlDecode(url),
                DomainName      = GetDomainName(HttpUtility.UrlDecode(url)),
                CampaignId      = campaignId,
                QaMode          = qaMode,
                NewUserId       = cookies.userId == "" ? Guid.NewGuid().ToString() : cookies.userId,
                NewImpressionId = Guid.NewGuid().ToString(),
            };

            context.UserId       = context.NewUserId;
            context.ImpressionId = context.NewImpressionId;

            dynamic result = null;

            try
            {
                result = GetProductsByUrlOrKeywordAction(context);
            }
            catch (Exception ex)
            {
                context.Status = 3;

                var pcmInfo  = new CsePcmInfo();
                var products = new List <CseProductInfo>();

                result = GetResult(context, pcmInfo, products);
            }

            result = LogResult(context, result);

            return(result);
        }
예제 #7
0
        private dynamic GetProductsByTriggerAction(DealFinderContext context)
        {
            var  domainTriggers = GetDomainTriggersAndCountry(context);
            bool hasMatch       = CheckIfCurrentDomainHasMatchForCurrentUrl(context, domainTriggers);

            var  retargetingProvider = new RetargetingProvider(context);
            var  retargetingInfo     = retargetingProvider.GetRetargetingInfo();
            var  retargetingSettings = retargetingProvider.GetRtSettings();
            bool isEcommerceDomain   = retargetingProvider.IsEcommerceDomain();

            context.IsRetargetingEnabled  = retargetingSettings.is_active;
            context.IsEcommerceDomain     = isEcommerceDomain;
            context.EcommerceRecency      = retargetingSettings.e_com_rec.ToString() + " Minutes";
            context.NonEcommerceRecency   = retargetingSettings.non_e_com_rec.ToString() + " Minutes";
            context.NonEcommerceFrequency = retargetingSettings.freq.ToString();

            dynamic result = null;

            if (hasMatch)
            {
                result = GetProductsByUrlOrKeywordAction(context);

                int stackCount = 0;
                var stack      = retargetingProvider.UpdateProductIdsStack(context.RtStack, (string)result.product_id, out stackCount);

                result.rt_stack      = stack;
                result.rt_pointer    = (stackCount - 1).ToString();
                result.rt_last_shown = DateTime.Now.Ticks.ToString();
            }
            else
            {
                context.Status             = -1;
                context.PageType           = "No Trigger";
                context.IsDomainInDataBase = GetDomainCache(context.DomainName).Length > 0;

                if (retargetingInfo == null)
                {
                    var pcmInfo  = new CsePcmInfo();
                    var products = new List <CseProductInfo>();

                    result = GetResult(context, pcmInfo, products);
                }
                else
                {
                    context.IsRetargetingResult = true;
                    context.PageType            = isEcommerceDomain ? "Retargeting eCom" : "Retargeting non eCom";

                    result = GetProductsByPcmIdAction(context, (ObjectId)retargetingInfo.product_id);

                    result.rt_pointer    = retargetingInfo.pointer;
                    result.rt_show_count = retargetingInfo.show_count.ToString();
                    result.rt_last_shown = DateTime.Now.Ticks.ToString();
                }
            }

            return(result);
        }
예제 #8
0
        public static string GenerateOuterClickUrl(string offerUrl, string pageId, int shownProducts, int shownStores, int storePos,
                                                   string prodPrice, string storePrice, string prodSku, string minStorePrice,
                                                   string maxStorePrice, DealFinderContext dealFinderContext, string api,
                                                   bool encode)
        {
            var queryParams = new StringBuilder();

            queryParams.Append(string.Format("productURL={0}&", HttpUtility.UrlEncode(offerUrl)));
            queryParams.Append(string.Format("domainName={0}&", dealFinderContext.DomainName));
            queryParams.Append(string.Format("pageId={0}&", pageId));
            queryParams.Append(string.Format("currency={0}&", dealFinderContext.Currency));
            queryParams.Append(string.Format("category={0}&", dealFinderContext.Category));
            queryParams.Append(string.Format("country={0}&", dealFinderContext.Country));
            queryParams.Append(string.Format("impressionId={0}&", dealFinderContext.ImpressionId));
            queryParams.Append(string.Format("userId={0}&", dealFinderContext.UserId));
            queryParams.Append(string.Format("campaignId={0}&", dealFinderContext.CampaignId));
            queryParams.Append(string.Format("shownProducts={0}&", shownProducts));
            queryParams.Append(string.Format("shownStores={0}&", shownStores));
            queryParams.Append(string.Format("storeApi={0}&", api));
            queryParams.Append(string.Format("storePos={0}&", storePos));
            queryParams.Append(string.Format("storePrice={0}&", storePrice));
            queryParams.Append(string.Format("productPrice={0}&", prodPrice));
            queryParams.Append(string.Format("minStorePrice={0}&", minStorePrice));
            queryParams.Append(string.Format("maxStorePrice={0}&", maxStorePrice));
            queryParams.Append(string.Format("clickType={0}&", 1));
            queryParams.Append(string.Format("prodSku={0}", prodSku));

            string url = queryParams.ToString();

            string clickUrl = null;

            if (!encode)
            {
                clickUrl = string.Format("{0}/?{1}", ConfigurationManager.AppSettings["ClickUrl"], url);
            }
            else
            {
                var query         = new StringBuilder();
                var mongoProvider = new CseToMongoEtlProvider();
                var offerUrlId    = mongoProvider.GetUrlId(url);

                query.Append(string.Format("data={0}", offerUrlId));
                query.Append(string.Format("&nid={0}", dealFinderContext.Nid));
                query.Append(string.Format("&sid={0}", dealFinderContext.Sid == null ? "0" : dealFinderContext.Sid));

                clickUrl = string.Format("{0}/?{1}", ConfigurationManager.AppSettings["ClickUrl"], query.ToString());
            }

            return(clickUrl);
        }
예제 #9
0
        public dynamic GetProductsByTrigger(string url, string campaignId, string sid, dynamic cookies, bool qaMode)
        {
            var context = new DealFinderContext(HttpContext.Current)
            {
                Url             = HttpUtility.UrlDecode(url),
                DomainName      = GetDomainName(HttpUtility.UrlDecode(url)),
                CampaignId      = campaignId,
                QaMode          = qaMode,
                RtPointer       = cookies.rtPointer,
                RtLastShown     = cookies.rtLastShown,
                RtShowCount     = cookies.rtShowCount,
                RtStack         = cookies.rtStack,
                NewUserId       = cookies.userId == "" ? Guid.NewGuid().ToString() : cookies.userId,
                NewImpressionId = Guid.NewGuid().ToString(),
                CookiesEnabled  = cookies.cookiesEnabled,
                Sid             = sid,
                Nid             = campaignId,
                Op = GetOP(campaignId, sid, campaignId)
            };

            var timer = new TimerProvider(context, "global-server-time");

            context.UserId       = context.NewUserId;
            context.ImpressionId = context.NewImpressionId;

            dynamic result = null;

            try
            {
                result = GetProductsByTriggerAction(context);
            }
            catch (Exception ex)
            {
                context.Status = 3;

                var pcmInfo  = new CsePcmInfo();
                var products = new List <CseProductInfo>();

                result = GetResult(context, pcmInfo, products);
            }

            result = LogResult(context, result);

            AddDebugParameters(context);

            timer.StopTimer();

            return(result);
        }
예제 #10
0
        private string GetMoreDealsUrl(DealFinderContext context, string productName)
        {
            productName = productName.Replace(" ", "+");

            string result = null;

            if (context.Currency == "$")
            {
                result = context.ProductName != "" ? @"http://www.shoppingedge.com/keyword-" + productName + "/search.html?campaign=5900007" : "";
            }
            else
            {
                result = context.ProductName != "" ? @"http://www.uk.cybercie.com/keyword-" + productName + "/search.html?campaign=5900007" : "";
            }

            return(result);
        }
예제 #11
0
        public void LogImpression(string shownProducts, string shownStores, string minStoresPrice, string maxStoresPrice,
                                  string prodPrice, string prodSku, string storePos, string storePrice, string storeMid,
                                  string storeApi, string storePid, string query, DealFinderContext dealFinderContext)
        {
            DfImpressionBusinessMessage impression = new DfImpressionBusinessMessage("df", "df_impression", DateTime.Now);

            impression.AbTestId        = dealFinderContext.AbTestGroupId;
            impression.AbTestStatus    = dealFinderContext.AbTestShowWidget;
            impression.Application     = "DealFinder";
            impression.CampaignID      = dealFinderContext.CampaignId.ToString();
            impression.CategoryID      = dealFinderContext.Category;
            impression.Currency        = dealFinderContext.Currency;
            impression.DomainName      = dealFinderContext.DomainName;
            impression.GUID            = dealFinderContext.UserId;
            impression.IMPID           = dealFinderContext.ImpressionId;
            impression.MachineIP       = dealFinderContext.HostName;
            impression.RequestIP       = dealFinderContext.Ip;
            impression.MessageVersion  = "1";
            impression.PageID          = dealFinderContext.Sid;
            impression.PageType        = string.IsNullOrEmpty(dealFinderContext.PageType) ? "category" : dealFinderContext.PageType;
            impression.Query           = query;
            impression.Rendered        = dealFinderContext.CookiesEnabled ? "0" : "-1";
            impression.RequestRaw      = dealFinderContext.RequestUrl;
            impression.SubCampaignID   = dealFinderContext.Country;
            impression.URL             = HttpUtility.UrlDecode(dealFinderContext.Referrer);
            impression.UserAgent       = dealFinderContext.UserAgent;
            impression.WidgetAlgorithm = "default";

            impression.SKU = prodSku;
            impression.MID = storeMid;
            impression.PID = storePid;
            impression.API = storeApi;

            impression.ProdPrice     = prodPrice;
            impression.ShownOffers   = shownStores;
            impression.ShownProducts = shownProducts;
            impression.MinPrice      = minStoresPrice;
            impression.MaxPrice      = maxStoresPrice;
            impression.StorePos      = storePos;
            impression.StorePrice    = storePrice;

            BusinessMessageWriter writer = new BusinessMessageWriter();

            //writer.WriteMessageToQueue(impression);
        }
예제 #12
0
        private dynamic GetProductsByPcmIdAction(DealFinderContext context, ObjectId pcmId)
        {
            var appCachedValue = string.Format("GetProductsByPcmId:{0}", pcmId);
            var products       = new List <CseProductInfo>();
            var pcmInfo        = new CsePcmInfo();

            context.Status = 1;

            if (MemoryCache.Default.Get(appCachedValue) == null || context.QaMode == true)
            {
                var pcmProvider = new PcmProvider(context);
                pcmInfo = pcmProvider.GetProductFromPcmById(pcmId);

                context.IsExistInPcm   = true;
                context.ProductName    = pcmInfo.ProductName;
                context.Price          = pcmInfo.Price;
                context.IsDefaultPrice = pcmInfo.IsDefaultPrice;

                var productsProvider = new ProductsProvider(context);
                products = productsProvider.GetProductsFromPcm(pcmInfo);

                dynamic cacheObject = new
                {
                    products = products,
                    pcm      = pcmInfo
                };

                MemoryCache.Default.Add(appCachedValue, cacheObject, DateTimeOffset.Now.AddHours(4));
            }
            else
            {
                var cacheOject = (dynamic)MemoryCache.Default[appCachedValue];

                products = cacheOject.products;
                pcmInfo  = cacheOject.pcm;
            }

            context.Currency = pcmInfo.Currency;

            var result = GetResult(context, pcmInfo, products);

            return(result);
        }
예제 #13
0
        public void LogClick(string prodPrice, string shownStores, string shownProducts, string storeApi,
                             string storeMid, string storePid, string storePos, string storePrice, string pageId,
                             string prodSku, string minStorePrice, string maxStorePrice, string clickType, string productUrl, string op,
                             DealFinderContext dealFinderContext)
        {
            DfClickBusinessMessage click = new DfClickBusinessMessage("df", "df_click", DateTime.Now);

            click.ClickType     = clickType;
            click.CampaignID    = dealFinderContext.CampaignId.ToString();
            click.SubCampaignID = dealFinderContext.Country;
            click.DomainName    = dealFinderContext.DomainName;
            click.PageID        = pageId;
            click.Query         = op;
            click.RequestIP     = dealFinderContext.Ip;
            click.MachineIP     = dealFinderContext.HostName;
            click.UserAgent     = dealFinderContext.UserAgent;
            click.URL           = productUrl;
            click.Application   = "DealFinder";
            click.IMPID         = dealFinderContext.ImpressionId;
            click.ShownOffers   = shownStores;
            click.ShownProducts = shownProducts;
            click.ProdPrice     = prodPrice;
            click.API           = storeApi;
            click.MID           = storeMid;
            click.PID           = storePid;
            click.StorePos      = storePos;
            click.StorePrice    = storePrice;
            click.Rendered      = "0";
            click.GUID          = dealFinderContext.UserId;
            click.Currency      = dealFinderContext.Category;
            click.SKU           = prodSku;
            click.MinPrice      = minStorePrice;
            click.MaxPrice      = maxStorePrice;

            BusinessMessageWriter writer = new BusinessMessageWriter();

            //writer.WriteMessageToQueue(click);
        }
예제 #14
0
        private bool CheckIfCurrentDomainHasMatchForCurrentUrl(DealFinderContext context, List <string> domainTriggers)
        {
            foreach (dynamic trigger in domainTriggers)
            {
                Match match = Match.Empty;

                try
                {
                    match = Regex.Match(context.Url, trigger);
                }
                catch (Exception ex)
                {
                    context.AddDebug("Bad Trigger !", trigger);
                }

                if (match.Success)
                {
                    context.CurrentTrigger = trigger;
                    return(true);
                }
            }

            return(false);
        }
예제 #15
0
 public FilterProvider(DealFinderContext context)
 {
     _context = context;
 }
예제 #16
0
        private dynamic GetResult(DealFinderContext context, CsePcmInfo pcmInfo, List <CseProductInfo> products)
        {
            dynamic result = new ExpandoObject();

            result.html_template   = new MarketTemplateProvider().GetTemplate();
            result.keyword         = pcmInfo.ProductDisplayName;
            result.encoded_keyword = pcmInfo.ProductName;
            result.height          = "90px";
            result.more_deals_url  = GetMoreDealsUrl(context, pcmInfo.ProductName);
            result.sku             = context.CachedValue;
            result.product_id      = pcmInfo.ObjectId.ToString();
            result.rt_pointer      = null;
            result.rt_stack        = null;
            result.rt_show_count   = null;
            result.rt_last_shown   = null;
            result.price           = pcmInfo.Price;
            result.debug           = context.Debug;
            result.timers          = context.Timers;
            result.user_id         = context.NewUserId;
            result.impression_id   = context.NewImpressionId;

            var resultProductList = new List <dynamic>();

            foreach (var product in products)
            {
                foreach (var offer in product.Offers)
                {
                    var productUrl = GenerateOuterClickUrl(offer.Url,
                                                           context.PageType, 3, 3, 0, offer.Price.ToString(), offer.Price.ToString(),
                                                           context.CachedValue, offer.Price.ToString(), offer.Price.ToString(),
                                                           context, product.ShoppingEngine.ToString(), true);

                    dynamic productResult = new ExpandoObject();

                    productResult.category          = product.CategoryId;
                    productResult.product_id        = product.ProductId;
                    productResult.product_name      = product.Name.Length > 35 ? product.Name.Remove(35, product.Name.Length - 35) + "..." : product.Name;
                    productResult.product_image     = product.Image;
                    productResult.product_url       = productUrl;
                    productResult.product_price_raw = offer.Price;
                    productResult.product_price     = string.Format("{0:0.00}", offer.Price);
                    productResult.merchant_image    = offer.MerchantInfo.UseLogo ? offer.MerchantInfo.Logo : "";
                    productResult.merchant_name     = offer.MerchantInfo.Name;
                    productResult.merchant_id       = offer.MerchantInfo.MerchantId;
                    productResult.country           = context.Country;
                    productResult.cse = product.ShoppingEngine;

                    resultProductList.Add(productResult);
                }
            }

            context.TotalNumberOfOffersToDisplay = resultProductList.Count;

            var sortProvider = new SortProvider(context);

            if (context.PageType == "search")
            {
                resultProductList = sortProvider.RandomizeProducts(resultProductList, 3);
            }

            resultProductList = sortProvider.SortProducts(resultProductList);

            result.products = resultProductList.Take(3).ToList();
            result.width    = CalculateWidth(result.products);

            if (context.Status == 0 || context.Status == 1)
            {
                if (result.products.Count == 0)
                {
                    context.Status = 2;
                }

                if (result.products.Count > 0 && result.products.Count < 3)
                {
                    context.Status = 4;
                }
            }

            return(result);
        }
예제 #17
0
 public RetargetingProvider(DealFinderContext context)
 {
     _context = context;
 }
예제 #18
0
 public GetSiteDataProvider(DealFinderContext context, bool getDebugParams)
 {
     _context        = context;
     _getDebugParams = getDebugParams;
 }
예제 #19
0
 public TimerProvider(DealFinderContext context, string operationName)
 {
     _operationName = operationName;
     _cotext        = context;
     _startTime     = DateTime.Now;
 }
예제 #20
0
 public SortProvider(DealFinderContext context)
 {
     _context = context;
 }
예제 #21
0
        private List <CseProductInfo> RetrieveProducts(DealFinderContext context, out CsePcmInfo pcmInfo)
        {
            var timer   = new TimerProvider(context, "extract-cache-value-and-domain");
            var domains = GetDomainCache(context.DomainName);

            if (domains.Length > 0)
            {
                context.IsDomainInDataBase = true;
            }

            if (context.PageType == "product")
            {
                int priority = 0;

                context.CachedValue         = GetCachedValue(domains, context.Url, context.DomainName, out priority);
                context.CachedValuePriority = priority == 0 ? "" : priority.ToString();
            }

            timer.StopTimer();

            var pcmProvider = new PcmProvider(context);

            pcmInfo = pcmProvider.GetProductFromPcmByCacheValueAndDomain();
            var products = new List <CseProductInfo>();

            if (pcmInfo == null)
            {
                if (context.PageType == "product")
                {
                    timer = new TimerProvider(context, "get-site-data");

                    var getSiteDataProvider = new GetSiteDataProvider(context, true);
                    var siteData            = getSiteDataProvider.GetSiteData();

                    timer.StopTimer();

                    context.IsGetSiteDataExecuted = true;

                    if (siteData == null)
                    {
                        context.IsGetSiteDataFailed = true;

                        pcmInfo = new CsePcmInfo();

                        return(products);
                    }
                }

                var productsProvider = new ProductsProvider(context);

                products = productsProvider.GetProductsFromCse(1);

                timer   = new TimerProvider(context, "insert-product-to-pcm");
                pcmInfo = pcmProvider.UpsertProductToPcm(products);
                timer.StopTimer();
            }
            else
            {
                context.IsExistInPcm   = true;
                context.Status         = 1;
                context.ProductName    = pcmInfo.ProductName;
                context.Price          = pcmInfo.Price;
                context.IsDefaultPrice = pcmInfo.IsDefaultPrice;

                timer = new TimerProvider(context, "get-data-from-pcm");

                var productsProvider = new ProductsProvider(context);
                products = productsProvider.GetProductsFromPcm(pcmInfo);

                timer.StopTimer();
            }

            context.ProductName     = pcmInfo.ProductDisplayName;
            context.Price           = pcmInfo.Price;
            context.DomainPriceRule = pcmInfo.DomainPriceRule;

            return(products);
        }
예제 #22
0
 public PcmProvider(DealFinderContext context)
 {
     _context         = context;
     _pcmDataProvider = new PcmToMongoEtlProvider();
 }
예제 #23
0
 public ProductsProvider(DealFinderContext context)
 {
     _context = context;
     _keyword = HttpUtility.UrlDecode(context.ProductName);
 }