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; }
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; }