public GetProductsByCategoryResponse GetProductsByCategory(GetProductsByCategoryRequest request) { var spec = new ProductDtoIsInCategorySpecification(request.CategoryId) .And(new ProductDtoIsInColourSpecification(request.ColourIds)) .And(new ProductDtoIsMadeByBrandSpecification(request.BrandIds)) .And(new ProductDtoIsInSizeSpecification(request.SizeIds)); IEnumerable <ProductDto> matchingProducts = FindAllProducts().Where(spec.IsSatisfiedBy); switch (request.SortBy) { case ProductsSortBy.PriceLowToHigh: matchingProducts = matchingProducts.OrderBy(p => p.Price); break; case ProductsSortBy.PriceHighToLow: matchingProducts = matchingProducts.OrderByDescending(p => p.Price); break; } GetProductsByCategoryResponse response = matchingProducts.CreateProductSearchResultFrom(request); response.SelectedCategoryName = GetAllCategories().Categories.Where(c => c.Id == request.CategoryId).FirstOrDefault().Name; return(response); }
public ActionResult GetProductsByAjax(GetProductsByCategoryRequest request) { GetProductsByCategoryRequest productSearchRequest = GenarateProductSeachRequest(request); GetProductsByCategoryResponse response = service.GetProductsByCategory(productSearchRequest); return(Json(response)); }
public GetProductsByCategoryResponse GetProductsByCategory(GetProductsByCategoryRequest request) { IProductSearchSpecification colourSpecification = new ProductIsInColorSpecification(request.ColorIds); IProductSearchSpecification brandSpecification = new ProductIsInBrandSpecification(request.BrandIds); IProductSearchSpecification sizeSpecification = new ProductIsInSizeSpecification(request.SizeIds); IProductSearchSpecification categorySpecification = new ProductIsInCategorySpecification(request.CategoryId); IEnumerable <Product> matchingProducts = FindAllProducts().Where(colourSpecification.IsSatisfiedBy) .Where(brandSpecification.IsSatisfiedBy) .Where(sizeSpecification.IsSatisfiedBy) .Where(categorySpecification.IsSatisfiedBy); switch (request.SortBy) { case ProductsSortBy.PriceLowToHigh: matchingProducts = matchingProducts.OrderBy(p => p.Price).ThenBy(p => p.Brand.Name).ThenBy(p => p.Name); break; case ProductsSortBy.PriceHighToLow: matchingProducts = matchingProducts.OrderByDescending(p => p.Price).ThenBy(p => p.Brand.Name).ThenBy(p => p.Name); break; } GetProductsByCategoryResponse response = CreateProductSearchResultFrom(matchingProducts, request); response.SelectedCategoryName = GetAllCategories().Categories.FirstOrDefault(c => c.Id == request.CategoryId)?.Name; return(response); }
public IActionResult GetProducts([FromBody] ProductSearchRequest jsonProductSearchRequest) { GetProductsByCategoryRequest productSearchRequest = GenerateProductSearchRequestFrom(jsonProductSearchRequest); GetProductsByCategoryResponse response = _cachedProductCatalogService.GetProductsByCategory(productSearchRequest); ProductSearchResultView productSearchResultView = GetProductSearchResultViewFrom(response); return(Ok(productSearchResultView)); }
public IActionResult GetProductsByCategory(int categoryId) { GetProductsByCategoryRequest productSearchRequest = GenerateInitialProductSearchRequestFrom(categoryId); GetProductsByCategoryResponse response = _cachedProductCatalogService.GetProductsByCategory(productSearchRequest); ProductSearchResultView productSearchResultView = GetProductSearchResultViewFrom(response); return(View("ProductSearchResults", productSearchResultView)); }
public JsonResult GetProductsByAjax(JsonProductSearchRequest jsonProductSearchRequest) { GetProductsByCategoryRequest productSearchRequest = GenerateProductSearchRequestFrom(jsonProductSearchRequest); GetProductsByCategoryResponse response = _productService.GetProductsByCategory(productSearchRequest); ProductSearchResultView productSearchResultView = GetProductSearchResultViewFrom(response); return(Json(productSearchResultView)); }
public GetProductsByCategoryResponse GetProductsByCategory(GetProductsByCategoryRequest request) { Expression <Func <Product, bool> > productQuery = ProductSearchRequestQueryGenerator.CreateQueryFor(request); IEnumerable <Product> productsMatchingRefinement = GetAllProductsMatchingQueryAndSort(request, productQuery); GetProductsByCategoryResponse response = CreateProductSearchResultFrom(productsMatchingRefinement, request); response.SelectedCategoryName = _categoryRepository.FindBy(request.CategoryId).Name; return(response); }
public GetProductsByCategoryResponse CreateProductSearchResultFrom(IEnumerable <Product> productsMatchingRefinement, GetProductsByCategoryRequest request) { GetProductsByCategoryResponse productSearchResultView = new GetProductsByCategoryResponse(); IEnumerable <ProductTitle> productsFound = productsMatchingRefinement.Select(p => p.Title); productSearchResultView.SelectedCategory = request.CategoryId; productSearchResultView.NumberOfTitlesFound = productsFound.GroupBy(t => t.Id).Select(g => g.First()).Count(); productSearchResultView.TotalNumberOfPages = NoOfResultPagesGiven(request.NumberOfResultsPerPage, productSearchResultView.NumberOfTitlesFound); productSearchResultView.RefinementGroups = GenerateAvailableProductRefinementsFrom(productsFound); productSearchResultView.Products = CropProductListToSatisfyGivenIndex(request.Index, request.NumberOfResultsPerPage, productsFound); return(productSearchResultView); }
private ProductSearchResultView GetProductResultViewFrom(GetProductsByCategoryResponse response) { var result = new ProductSearchResultView(); result.CurrentPage = response.CurrentPage; result.NumberOfTitlesFound = response.NumberOfTitlesFound; result.Products = response.Products; result.RefinementGroups = response.RefinementGroups; result.SelectedCategory = response.SelectedCategory; result.SelectedCategoryName = response.SelectedCategoryName; result.TotalNumberOfPages = response.TotalNumberOfPages; return(result); }
private ProductSearchResultView GetProductSearchResultViewFrom(GetProductsByCategoryResponse response) { ProductSearchResultView productSearchResultView = new ProductSearchResultView(); productSearchResultView.BasketSummary = base.GetBasketSummaryView(); productSearchResultView.Categories = base.GetCategories(); productSearchResultView.CurrentPage = response.CurrentPage; productSearchResultView.NumberOfTitlesFound = response.NumberOfTitlesFound; productSearchResultView.Products = response.Products; productSearchResultView.RefinementGroups = response.RefinementGroups; productSearchResultView.SelectedCategory = response.SelectedCategory; productSearchResultView.SelectedCategoryName = response.SelectedCategoryName; productSearchResultView.TotalNumberOfPages = response.TotalNumberOfPages; return(productSearchResultView); }
/// <summary> /// Get ProductView contain list product of selected category /// </summary> /// <param name="id">id of category</param> /// <returns></returns> public ActionResult GetProductByCategory(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } GetProductsByCategoryRequest request = CreateInitialProductSearchRequest((int)id); GetProductsByCategoryResponse response = service.GetProductsByCategory(request); PopulateStatusDropDownList(); PopulateNewProductList(); PopulateBestSellProductList(); PopulateCategoryList(); PopulateTopCategoryList(); return(View("DisplayProducts", response)); }
/// <summary> /// Get ProductView contain list product of selected category /// </summary> /// <param name="id">id of category</param> /// <returns></returns> public ActionResult GetProductByCategory(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } GetProductsByCategoryRequest request = CreateInitialProductSearchRequest((int)id); GetProductsByCategoryResponse response = service.GetProductsByCategory(request); PopulateStatusDropDownList(); PopulateNewProductList(); PopulateCategoryTreeViewDataSource(); ViewBag.BakeryCategoryList = GetChildrenCategories(8); ViewBag.KitchenToolsCategoryList = GetChildrenCategories(9); return(View("DisplayProducts", response)); }
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); }
public static GetProductsByCategoryResponse CreateResultFrom( this IEnumerable <Product> products, GetProductsByCategoryRequest request) { var result = new GetProductsByCategoryResponse(); var titlesFound = products.Select(p => p.Title).Distinct(); result.SelectedCategory = request.CategoryId; result.NumberOfTitlesFound = titlesFound.Count(); result.TotalNumberOfPages = NoOfResultPagesGiven(request.NumberOfResultsPerPage, result.NumberOfTitlesFound); result.RefinementGroups = GenerateAvailableProductRefinementsFrom(titlesFound); result.Products = CropProductListToSatisfyGivenIndex(request.PageIndex, request.NumberOfResultsPerPage, titlesFound); result.CurrentPage = request.PageIndex; return(result); }
public static GetProductsByCategoryResponse CreateProductSearchResultFrom(this IEnumerable <ProductDto> productsMatchingRefinement, GetProductsByCategoryRequest request) { GetProductsByCategoryResponse productSearchResultView = new GetProductsByCategoryResponse(); IEnumerable <ProductSummaryDto> typesOfProductsFound = productsMatchingRefinement.Select(e => new ProductSummaryDto() { Name = e.Name, BrandName = e.BrandName, Id = e.Id, Price = e.Price }).Distinct(); productSearchResultView.SelectedCategory = request.CategoryId; productSearchResultView.NumberOfTitlesFound = typesOfProductsFound.Count(); productSearchResultView.TotalNumberOfPages = NoOfResultPagesGiven(request.NumberOfResultsPerPage, productSearchResultView.NumberOfTitlesFound); productSearchResultView.RefinementGroups = GenerateAvailableProductRefinementsFrom(productsMatchingRefinement); productSearchResultView.Products = CropProductListToSatisfyGivenIndex(request.Index, request.NumberOfResultsPerPage, typesOfProductsFound); return(productSearchResultView); }
/// <summary> /// Get list product after category /// </summary> /// <param name="request">condition for filter</param> /// <returns>matched condition products</returns> public GetProductsByCategoryResponse GetProductsByCategory(GetProductsByCategoryRequest request) { string categoryName = categoryRepository.GetByID(request.CategoryId).Name; IEnumerable <ecom_Products> foundProducts = GetAllProductsMatchingQueryAndSort(request); GetProductsByCategoryResponse reponse = new GetProductsByCategoryResponse() { SelectedCategoryName = categoryName, SelectedCategory = request.CategoryId, BeginPrice = request.BeginPrice, EndPrice = request.EndPrice, NumberOfTitlesFound = foundProducts.Count(), TotalNumberOfPages = (int)Math.Ceiling((double)foundProducts.Count() / request.NumberOfResultsPerPage), CurrentPage = request.Index, TotalProducts = foundProducts.Count(), SearchString = request.SearchString, SortBy = (int)request.SortBy, BrandIds = request.BrandIds, Products = CropProductListToSatisfyGivenIndex(foundProducts, request.Index, request.NumberOfResultsPerPage).ConvertToProductSummaryViews(), Brands = foundProducts.Select(p => p.ecom_Brands).Where(b => b != null).Distinct().ToList().ConvertToBrandSummaryViews()// return list Brand exist in group product belong to selected category }; return(reponse); }