private static GetProductsByCategoryRequest GenerateProductSearchRequestFrom(JsonProductSearchRequest request) { GetProductsByCategoryRequest productSearchRequest = new GetProductsByCategoryRequest(); productSearchRequest.NoOfResultsPerPage = int.Parse(ApplicationSettingsFactory.GetApplicationSettings().NoOfResultsPerPage); productSearchRequest.Index = request.Index; productSearchRequest.CategoryId = request.CategoryId; productSearchRequest.SortBy = request.SortBy; List<RefinementGroup> refinementGroups = new List<RefinementGroup>(); foreach (var jsonRefinementGroup in request.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.NoOfResultsPerPage = int.Parse(ApplicationSettingsFactory.GetApplicationSettings().NoOfResultsPerPage); productSearchRequest.CategoryId = categoryId; productSearchRequest.Index = 1; productSearchRequest.SortBy = ProductsSortBy.PriceHighToLow; return productSearchRequest; }
public GetProductsByCategoryResponse GetProductsByCategory(GetProductsByCategoryRequest request) { GetProductsByCategoryResponse response; Query productQuery = ProductSearchRequestQueryGenerator.CreateQueryFor(request); IEnumerable<Product> productMatchingRefinemens = GetAllProductsMatchingQueryAndSort(request, productQuery); response = productMatchingRefinemens.CreateProductSearchResultsFrom(request); response.SelectedCategoryName = _categoryRepository.FindBy(request.CategoryId).Name; return response; }
public static GetProductsByCategoryResponse CreateProductSearchResultsFrom( this IEnumerable<Product> productsMatchingRefinement, GetProductsByCategoryRequest request) { GetProductsByCategoryResponse productSearchResultView = new GetProductsByCategoryResponse(); IEnumerable<ProductTitle> productsFound = productsMatchingRefinement.Select(p => p.Title).Distinct(); productSearchResultView.SelectedCategory = request.CategoryId; productSearchResultView.NoOfTitlesFound = productsFound.Count(); productSearchResultView.TotalNumberOfPages = NoOfResultPagesGiven(request.NoOfResultsPerPage, productSearchResultView.NoOfTitlesFound); productSearchResultView.RefinementGroups = GenerateAvailableProductRefinementsFrom(productsFound); productSearchResultView.Products = CropProductListToSatisfyGivenIndex(request.Index, request.NoOfResultsPerPage, productsFound); return productSearchResultView; }
private IEnumerable<Product> GetAllProductsMatchingQueryAndSort(GetProductsByCategoryRequest request, Query productQuery) { IEnumerable<Product> productsMatchingRefinement = _productRepository.FindBy(productQuery); switch (request.SortBy) { case ProductsSortBy.PriceHighToLow: productsMatchingRefinement = productsMatchingRefinement.OrderByDescending(p => p.Price); break; case ProductsSortBy.PriceLowToHigh: productsMatchingRefinement = productsMatchingRefinement.OrderBy(p => p.Price); break; } return productsMatchingRefinement; }
public static Query CreateQueryFor(GetProductsByCategoryRequest request) { Query productQuery = new Query(); Query colorQuery = new Query(); Query brandQuery = new Query(); Query sizeQuery = new Query(); colorQuery.QueryOperator = QueryOperator.Or; foreach (var id in request.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 (var id in request.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 (var id in request.SizeIds) { sizeQuery.Add(Criterion.Create<Product>(t => t.Size.Id, id, CriteriaOperator.Equal)); } if (sizeQuery.Criteria.Count() > 0) { productQuery.AddSubQuery(sizeQuery); } productQuery.Add(Criterion.Create<Product>(t => t.Category.Id, request.CategoryId, CriteriaOperator.Equal)); return productQuery; }