コード例 #1
0
        private static GetProductsByCategoryRequest GenerateInitialProductSearchRequestFrom(int categoryId)
        {
            GetProductsByCategoryRequest productSearchRequest = new GetProductsByCategoryRequest();

            productSearchRequest.NumberOfResultsPerPage = int.Parse(ApplicationSettingsFactory.GetApplicationSettings().NumberOfResultsPerPage);
            productSearchRequest.CategoryId = categoryId;
            productSearchRequest.Index = 1;
            productSearchRequest.SortBy = ProductsSortBy.PriceHighToLow;
            return productSearchRequest;
        }
コード例 #2
0
        public GetProductsByCategoryResponse GetProductsByCategory(GetProductsByCategoryRequest request)
        {
            GetProductsByCategoryResponse response;
            Query productQuery = ProductSearchRequestQueryGenerator.CreateQueryFor(request);
            IEnumerable<Product> productsMatchingRefinement = GetAllProductsMatchingQueryAndSort(request, productQuery);

            response = productsMatchingRefinement.CreateProductSearchResultFrom(request);
            response.SelectedCategoryName = _categoryRepository.FindBy(request.CategoryId).Name;

            return response;
        }
コード例 #3
0
        public static GetProductsByCategoryResponse CreateProductSearchResultFrom(this IEnumerable<Product> productsMatchingRefinement,
												GetProductsByCategoryRequest request)
        {
            GetProductsByCategoryResponse productSearchResultView = new GetProductsByCategoryResponse();

            IEnumerable<ProductTitle> productsFound = productsMatchingRefinement.Select(p => p.Title).Distinct();

            productSearchResultView.SelectedCategory = request.CategoryId;

            productSearchResultView.NumberOfTitlesFound = productsFound.Count();

            productSearchResultView.TotalNumberOfPages = NoOfResultPagesGiven(request.NumberOfResultsPerPage,
                                     productSearchResultView.NumberOfTitlesFound);

            productSearchResultView.RefinementGroups = GenerateAvailableProductRefinementsFrom(productsFound);

            productSearchResultView.Products = CropProductListToSatisfyGivenIndex(request.Index,
                                request.NumberOfResultsPerPage, productsFound);

            return productSearchResultView;
        }
コード例 #4
0
		public static Query CreateQueryFor(GetProductsByCategoryRequest getProductsByCategoryRequest)
		{
			Query productQuery = new Query();
			Query colorQuery = new Query();
			Query brandQuery = new Query();
			Query sizeQuery = new Query();

			colorQuery.QueryOperator = QueryOperator.Or;
			foreach (int id in getProductsByCategoryRequest.ColorIds)
				colorQuery.Add(Criterion.Create<Product>(p => p.Color.Id, id,
													   CriteriaOperator.Equal));

			if (colorQuery.Criteria.Count() > 0)
				productQuery.AddSubQuery(colorQuery);

			brandQuery.QueryOperator = QueryOperator.Or;

			foreach (int id in getProductsByCategoryRequest.BrandIds)
				brandQuery.Add(Criterion.Create<Product>(p => p.Brand.Id, id,
													   CriteriaOperator.Equal));

			if (brandQuery.Criteria.Count() > 0)
				productQuery.AddSubQuery(brandQuery);

			sizeQuery.QueryOperator = QueryOperator.Or;
			foreach (int id in getProductsByCategoryRequest.SizeIds)
				sizeQuery.Add(Criterion.Create<Product>(p => p.Size.Id, id,
													   CriteriaOperator.Equal));

			if (sizeQuery.Criteria.Count() > 0)
				productQuery.AddSubQuery(sizeQuery);

			productQuery.Add(Criterion.Create<Product>(p => p.Category.Id,
				  getProductsByCategoryRequest.CategoryId, CriteriaOperator.Equal));

			return productQuery;
		}
コード例 #5
0
 private IEnumerable<Product> GetAllProductsMatchingQueryAndSort(GetProductsByCategoryRequest request, Query productQuery)
 {
     IEnumerable<Product> productsMatchingRefinement = _productRepository.FindBy(productQuery);
     switch (request.SortBy)
     {
         case ProductsSortBy.PriceLowToHigh:
             productsMatchingRefinement = productsMatchingRefinement
                                          .OrderBy(p => p.Price);
             break;
         case ProductsSortBy.PriceHighToLow:
             productsMatchingRefinement = productsMatchingRefinement
                                          .OrderByDescending(p => p.Price);
             break;
     }
     return productsMatchingRefinement;
 }
コード例 #6
0
        private static GetProductsByCategoryRequest GenerateProductSearchRequestFrom(JsonProductSearchRequest jsonProductSearchRequest)
        {
            GetProductsByCategoryRequest productSearchRequest = new GetProductsByCategoryRequest();

            productSearchRequest.NumberOfResultsPerPage = int.Parse(ApplicationSettingsFactory.GetApplicationSettings().NumberOfResultsPerPage);

            productSearchRequest.Index = jsonProductSearchRequest.Index;
            productSearchRequest.CategoryId = jsonProductSearchRequest.CategoryId;
            productSearchRequest.SortBy = jsonProductSearchRequest.SortBy;

            List<RefinementGroup> refinementGroups = new List<RefinementGroup>();
            RefinementGroup refinementGroup;

            foreach (JsonRefinementGroup jsonRefinementGroup in jsonProductSearchRequest.RefinementGroups)
            {
                switch ((RefinementGroupings)jsonRefinementGroup.GroupId)
                {
                    case RefinementGroupings.brand:
                        productSearchRequest.BrandIds = jsonRefinementGroup.SelectedRefinements;
                        break;

                    case RefinementGroupings.color:
                        productSearchRequest.ColorIds = jsonRefinementGroup.SelectedRefinements;
                        break;
                    case RefinementGroupings.size:
                        productSearchRequest.SizeIds = jsonRefinementGroup.SelectedRefinements;
                        break;
                    default:
                        break;
                }
            }
            return productSearchRequest;
        }