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;
     if (jsonProductSearchRequest.RefinementGroups != null)
     {
         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;
 }
 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;
 }
        public GetProductsByCategoryResponse GetProductsByCategory(GetProductsByCategoryRequest request)
        {
            GetProductsByCategoryResponse response;

            Expression<Func<Product, bool>> query = ProductSearchRequestQueryGenerator.CreateQuery(request);

            IEnumerable<Product> productsMatchingRefinement = GetAllProductsMatchingQueryAndSort(request, query);

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

            return response;
        }
Пример #4
0
 public static GetProductsByCategoryResponse CreateProductSearchResultFrom(
 this IEnumerable<Product> productsMatchingRefinement,
 GetProductsByCategoryRequest request)
 {
     GetProductsByCategoryResponse productSearchResultView = new GetProductsByCategoryResponse();
     IEnumerable<ProductTitle> productsFound = productsMatchingRefinement.Select(p => p.ProductTitle).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;
 }
 private IEnumerable<Product> GetAllProductsMatchingQueryAndSort(GetProductsByCategoryRequest request, Expression<Func<Product, bool>> where)
 {
     IEnumerable<Product> productsMatchingRefinement = _productRepository.GetMany(where);
     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;
 }
        public static Expression<Func<Product, bool>> CreateQuery(GetProductsByCategoryRequest getProductsByCategoryRequest)
        {
            var predicate = PredicateBuilder.Create<Product>(item => true);

            predicate = x => x.ProductTitle.Category.Id == getProductsByCategoryRequest.CategoryId;

            //Add Filter by BrandId
            if (getProductsByCategoryRequest.BrandIds != null && getProductsByCategoryRequest.BrandIds.Count() > 0)
                predicate = predicate.Or(y => getProductsByCategoryRequest.BrandIds.Contains(y.ProductTitle.Brand.Id));

            //Add Filter by ColorId
            if (getProductsByCategoryRequest.ColorIds != null && getProductsByCategoryRequest.ColorIds.Count() > 0)
                predicate = predicate.And(c => getProductsByCategoryRequest.ColorIds.Contains(c.ProductTitle.Colour.Id));

            //Add Filter by SizeIds
            if (getProductsByCategoryRequest.SizeIds != null && getProductsByCategoryRequest.SizeIds.Count() > 0)
                predicate = predicate.And(s => getProductsByCategoryRequest.SizeIds.Contains(s.Size.Id));

            return predicate;
        }