示例#1
0
        static void Main(string[] args)
        {
            var db = new TransactionEntities();

            Console.WriteLine("DB Connection Established.");
            Console.WriteLine("Clearing old recommendations.");

            db.ProductRecommendations.ToList().Select(p => db.ProductRecommendations.Remove(p));
            db.SaveChanges();

            Console.WriteLine("Calculating new recommendations.");
            var records = db.TransactionRecords.ToList();

            var products = records.Select(t => t.productId).Distinct().OrderBy(t => t).ToList();
            var results  = new List <ProductRecommendation>();

            products.ForEach(p =>
            {
                Console.WriteLine($"Calculating recommendations for {p}");
                var rec       = new ProductRecommendation();
                rec.ProductId = int.Parse(p);
                rec.RecomendedProductIdsJson = JsonConvert.SerializeObject(CommonlyPurchasedTogether(p, records));
            });


            Console.WriteLine("Saving results.");
            db.ProductRecommendations.AddRange(results);
            db.SaveChanges();


            Console.WriteLine("All done.  Press the anykey to exit!");
            Console.ReadLine();
        }
 dynamic MapProduct(ProductRecommendation p)
 {
     return new
     {
         id          = p.ProductId,
         partId      = p.PartId,
         dispPartId  = p.DisplayPartId,
         name        = p.ProductName,
         desc        = p.ProductDescription,
         shade       = p.ShadeName,
         price       = p.ListPrice,
         useupRate   = 0,  // p.UseUpRateInDays, // TODO: add useupRate when supported from endeca
         listImage   = MapImageUrl(p.ProductImageUrl)
     };
 }
示例#3
0
        protected override Task InitializeAsync(DownstreamRequest request)
        {
            var jTokens = Json.SelectTokens(request.Scenario.Connection.ResponseJsonPath, errorWhenNoMatch: true);

            foreach (var jToken in jTokens)
            {
                var product = new ProductRecommendation
                {
                    ProductId = jToken.ToString(),
                    Scenario  = request.Scenario.Name,
                };
                Products.Add(product);
            }
            return(Task.CompletedTask);
        }
示例#4
0
        public static void createTestData(TestContext context)
        {
            #region  Product List and User List Creation - check valid list item for usage

            List <ProductRecommendation> testPR = new List <ProductRecommendation>();
            List <UserRecommendation>    testUR = new List <UserRecommendation>();

            Product product1 = new Product();
            product1.ProductId          = "1";
            product1.ProductName        = "Product1";
            product1.ProductDescription = string.Empty;
            product1.ProductImageurl    = string.Empty;

            Product product2 = new Product();
            product2.ProductId          = "2";
            product2.ProductName        = "Product2";
            product2.ProductDescription = string.Empty;
            product2.ProductImageurl    = string.Empty;

            Product product3 = new Product();
            product3.ProductId          = "3";
            product3.ProductName        = "Product3";
            product3.ProductDescription = string.Empty;
            product3.ProductImageurl    = string.Empty;


            ProductRecommendation pr1 = new ProductRecommendation();
            pr1.Rank    = 1;
            pr1.Product = product1;

            ProductRecommendation pr2 = new ProductRecommendation();
            pr2.Rank    = 2;
            pr2.Product = product2;

            ProductRecommendation pr3 = new ProductRecommendation();
            pr3.Rank    = 3;
            pr3.Product = product3;

            testPR.Add(pr1);
            testPR.Add(pr2);
            testPR.Add(pr3);

            foreach (ProductRecommendation item in testPR)
            {
                string commandText = getCommand(true, item, PARAM_SOURCE_ID, PARAM_PRODUCT_KEY);
                executeCommand(commandText);
            }


            UserRecommendation ur1 = new UserRecommendation();
            ur1.Rank    = 1;
            ur1.Product = product1;


            UserRecommendation ur2 = new UserRecommendation();
            ur2.Rank    = 2;
            ur2.Product = product2;


            UserRecommendation ur3 = new UserRecommendation();
            ur3.Rank    = 3;
            ur3.Product = product3;

            testUR.Add(ur1);
            testUR.Add(ur2);
            testUR.Add(ur3);

            foreach (UserRecommendation item in testUR)
            {
                string commandText = getCommand(true, item, PARAM_SOURCE_ID, PARAM_USER_KEY);
                executeCommand(commandText);
            }

            #endregion  Product List and User List Creation - check valid list item for usage
        }
示例#5
0
        public void productToProductRecommendationTest()
        {
            bool actual = false;

            Result actualResult;
            Result expectedResult;

            Mock <IWebOperationContext> mockContext = new Mock <IWebOperationContext> {
                DefaultValue = DefaultValue.Mock
            };

            using (new MockedWebOperationContext(mockContext.Object))
            {
                #region Same Product List and params from Initialization

                APIPrototypeService target = new APIPrototypeService();
                string tenantId            = PARAM_TENANT_ID;
                string sourceId            = PARAM_SOURCE_ID;
                string productKey          = PARAM_PRODUCT_KEY;

                List <ProductRecommendation> testPR = new List <ProductRecommendation>();

                Product product1 = new Product();
                product1.ProductId          = "1";
                product1.ProductName        = "Product1";
                product1.ProductDescription = string.Empty;
                product1.ProductImageurl    = string.Empty;

                Product product2 = new Product();
                product2.ProductId          = "2";
                product2.ProductName        = "Product2";
                product2.ProductDescription = string.Empty;
                product2.ProductImageurl    = string.Empty;

                Product product3 = new Product();
                product3.ProductId          = "3";
                product3.ProductName        = "Product3";
                product3.ProductDescription = string.Empty;
                product3.ProductImageurl    = string.Empty;


                ProductRecommendation pr1 = new ProductRecommendation();
                pr1.Rank    = 1;
                pr1.Product = product1;

                ProductRecommendation pr2 = new ProductRecommendation();
                pr2.Rank    = 2;
                pr2.Product = product2;

                ProductRecommendation pr3 = new ProductRecommendation();
                pr3.Rank    = 3;
                pr3.Product = product3;

                testPR.Add(pr1);
                testPR.Add(pr2);
                testPR.Add(pr3);

                #endregion Same Product List and params from Initialization

                expectedResult           = new Result();
                expectedResult.tenantId  = long.Parse(tenantId);
                expectedResult.resultSet = testPR;

                actualResult = target.productToProductRecommendation(tenantId, sourceId, productKey);
                //Compare values of object expected and actual from service by Value!
                actual = APIPrototype.Utils.ObjectHelper.AreObjectsEqual(actualResult, expectedResult);
            }

            Assert.IsTrue(actual);
        }
示例#6
0
        /// <summary>
        /// Returns TSQL for given object
        /// </summary>
        /// <param name="isInsert"></param>
        /// <param name="referenceObject"></param>
        /// <param name="sourceSystemId"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        private static string getCommand(bool isInsert, object referenceObject, string sourceSystemId, string key)
        {
            string retVal = string.Empty;

            if (isInsert)
            {
                if (referenceObject.GetType() == typeof(ProductRecommendation))
                {
                    string productInsertQuery = SqlResource.ProductInsertQuery;
                    ProductRecommendation pr  = (ProductRecommendation)referenceObject;

                    productInsertQuery = productInsertQuery.Replace("[[sourcesystemid]]", sourceSystemId);
                    productInsertQuery = productInsertQuery.Replace("[[targetproductid]]", formatSQLInput(key));
                    productInsertQuery = productInsertQuery.Replace("[[productid]]", formatSQLInput(pr.Product.ProductId));
                    productInsertQuery = productInsertQuery.Replace("[[productname]]", formatSQLInput(pr.Product.ProductName));
                    productInsertQuery = productInsertQuery.Replace("[[productdescription]]", formatSQLInput(pr.Product.ProductDescription));
                    productInsertQuery = productInsertQuery.Replace("[[productimageurl]]", formatSQLInput(pr.Product.ProductImageurl));
                    productInsertQuery = productInsertQuery.Replace("[[rank]]", pr.Rank.ToString());

                    retVal = productInsertQuery;
                }
                else if (referenceObject.GetType() == typeof(UserRecommendation))
                {
                    string             userInsertQuery = SqlResource.UserInsertQuery;
                    UserRecommendation ur = (UserRecommendation)referenceObject;

                    userInsertQuery = userInsertQuery.Replace("[[sourcesystemid]]", sourceSystemId);
                    userInsertQuery = userInsertQuery.Replace("[[userid]]", formatSQLInput(key));
                    userInsertQuery = userInsertQuery.Replace("[[productid]]", formatSQLInput(ur.Product.ProductId));
                    userInsertQuery = userInsertQuery.Replace("[[productname]]", formatSQLInput(ur.Product.ProductName));
                    userInsertQuery = userInsertQuery.Replace("[[productdescription]]", formatSQLInput(ur.Product.ProductDescription));
                    userInsertQuery = userInsertQuery.Replace("[[productimageurl]]", formatSQLInput(ur.Product.ProductImageurl));
                    userInsertQuery = userInsertQuery.Replace("[[rank]]", ur.Rank.ToString());

                    retVal = userInsertQuery;
                }
                else
                {
                    throw new Exception("Incorrect command option for given object");
                }
            }
            else // delete command is requested
            {
                if (referenceObject.GetType() == typeof(ProductRecommendation))
                {
                    string productDeleteQuery = SqlResource.ProductDeleteQuery;

                    productDeleteQuery = productDeleteQuery.Replace("[[sourcesystemid]]", sourceSystemId);
                    productDeleteQuery = productDeleteQuery.Replace("[[targetproductid]]", formatSQLInput(key));

                    retVal = productDeleteQuery;
                }
                else if (referenceObject.GetType() == typeof(UserRecommendation))
                {
                    string userDeleteQuery = SqlResource.UserDeleteQuery;

                    userDeleteQuery = userDeleteQuery.Replace("[[sourcesystemid]]", sourceSystemId);
                    userDeleteQuery = userDeleteQuery.Replace("[[userid]]", formatSQLInput(key));

                    retVal = userDeleteQuery;
                }
                else
                {
                    throw new Exception("Incorrect command option for given object");
                }
            }

            return(retVal);
        }