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