public static Query CreateQueryFor( GetPseudoSkusByCategoryRequest getPseudoSkusByCategoryRequest) { Query pseudoSkuQuery = new Query(); Query colorQuery = new Query(); Query functionQuery = new Query(); Query sizeQuery = new Query(); colorQuery.QueryOperator = QueryOperator.Or; foreach (int id in getPseudoSkusByCategoryRequest.ColorIds) { colorQuery.Add(Criterion.Create <PseudoSku>(p => p.Color.Id, id, CriteriaOperator.Equal)); } if (colorQuery.Criteria.Count() > 0) { pseudoSkuQuery.AddSubQuery(colorQuery); } functionQuery.QueryOperator = QueryOperator.Or; foreach (int id in getPseudoSkusByCategoryRequest.FunctionIds) { functionQuery.Add(Criterion.Create <PseudoSku>(p => p.Function.Id, id, CriteriaOperator.Equal)); } if (functionQuery.Criteria.Count() > 0) { pseudoSkuQuery.AddSubQuery(functionQuery); } sizeQuery.QueryOperator = QueryOperator.Or; foreach (int id in getPseudoSkusByCategoryRequest.SizeIds) { sizeQuery.Add(Criterion.Create <PseudoSku>(p => p.Size.Id, id, CriteriaOperator.Equal)); } if (sizeQuery.Criteria.Count() > 0) { pseudoSkuQuery.AddSubQuery(sizeQuery); } pseudoSkuQuery.Add(Criterion.Create <PseudoSku>(p => p.Category.Id, getPseudoSkusByCategoryRequest.CategoryId, CriteriaOperator.Equal)); return(pseudoSkuQuery); }
//Gives pseudo SKUs that match a criterion of category, color, function and size private IEnumerable <PseudoSku> GetAllPseudoSkusMatchingQueryAndSort(GetPseudoSkusByCategoryRequest request, Query pseudoSkuQuery) { IEnumerable <PseudoSku> pseudoSkusMatchingRefinement = _pseudoSkuRepository.FindBy(pseudoSkuQuery); switch (request.SortBy) { case PseudoSkusSortBy.PriceLowToHigh: pseudoSkusMatchingRefinement = pseudoSkusMatchingRefinement.OrderBy(p => p.Price); break; case PseudoSkusSortBy.PriceHighToLow: pseudoSkusMatchingRefinement = pseudoSkusMatchingRefinement.OrderByDescending(p => p.Price); break; } return(pseudoSkusMatchingRefinement); }
//Gives all pseudo for a category e.g. print, solution etc public GetPseudoSkusByCategoryResponse GetPseudoSkusByCategory(GetPseudoSkusByCategoryRequest request) { GetPseudoSkusByCategoryResponse response; Query productQuery = PseudoSkuSearchRequestGenerator.CreateQueryFor(request); IEnumerable <PseudoSku> pseudoSkusMatchingRefinement = GetAllPseudoSkusMatchingQueryAndSort(request, productQuery); response = pseudoSkusMatchingRefinement.CreateProductSearchResultFrom(request); response.SelectedCategoryName = _categoryRepository.FindBy(request.CategoryId).Name; return(response); }
public static GetPseudoSkusByCategoryResponse CreateProductSearchResultFrom(this IEnumerable <PseudoSku> pseudoSkusMatchingRefinement, GetPseudoSkusByCategoryRequest request) { var pseudoSkuSearchResultView = new GetPseudoSkusByCategoryResponse(); IEnumerable <PseudoSkuTitle> pseudoSkusFound = pseudoSkusMatchingRefinement.Select(p => p.Title).Distinct(); pseudoSkuSearchResultView.SelectedCategory = request.CategoryId; pseudoSkuSearchResultView.NumberOfTitlesFound = pseudoSkusFound.Count(); pseudoSkuSearchResultView.TotalNumberOfPages = NoOfResultPagesGiven(request.NumberOfResultsPerPage, pseudoSkuSearchResultView.NumberOfTitlesFound); pseudoSkuSearchResultView.RefinementGroups = GenerateAvailableProductRefinementsFrom(pseudoSkusFound); pseudoSkuSearchResultView.Products = CropProductListToSatisfyGivenIndex(request.Index, request.NumberOfResultsPerPage, pseudoSkusFound); return(pseudoSkuSearchResultView); }