public static GetProductsByCategoryResponse CreateProductSearchResultFrom( this IEnumerable<Product> productsMatchingRefinement, GetProductsByCategoryRequest request) { var productSearchResultView = new GetProductsByCategoryResponse(); var 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; }
public GetProductsByCategoryResponse GetProductsByCategory(GetProductsByCategoryRequest request) { if (request == null) throw new ArgumentNullException("request"); var response = new GetProductsByCategoryResponse(); var specification = new DirectSpecification<Product>(product => product.ProductTitle.Category.Id == request.CategoryId); switch (request.SortBy) { case ProductsSortBy.PriceHighToLow: { response = _productRepository.GetBySpec(specification).OrderByDescending(p => p.ProductTitle.Price). CreateProductSearchResultFrom(request); break; } case ProductsSortBy.PriceLowToHigh: { response = _productRepository.GetBySpec(specification).OrderBy(p => p.ProductTitle.Price). CreateProductSearchResultFrom(request); break; } } var singleCategory = _categoryRepository.GetBySpec( new DirectSpecification<Category>(category => category.Id == request.CategoryId)).SingleOrDefault(); if (singleCategory != null) response.SelectedCategoryName = singleCategory.Name; return response; }