Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        public ActionResult GetProductsByAjax(GetProductsByCategoryRequest request)
        {
            GetProductsByCategoryRequest  productSearchRequest = GenarateProductSeachRequest(request);
            GetProductsByCategoryResponse response             = service.GetProductsByCategory(productSearchRequest);

            return(Json(response));
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        public IActionResult GetProducts([FromBody] ProductSearchRequest jsonProductSearchRequest)
        {
            GetProductsByCategoryRequest  productSearchRequest    = GenerateProductSearchRequestFrom(jsonProductSearchRequest);
            GetProductsByCategoryResponse response                = _cachedProductCatalogService.GetProductsByCategory(productSearchRequest);
            ProductSearchResultView       productSearchResultView = GetProductSearchResultViewFrom(response);

            return(Ok(productSearchResultView));
        }
Exemplo n.º 5
0
        public IActionResult GetProductsByCategory(int categoryId)
        {
            GetProductsByCategoryRequest  productSearchRequest    = GenerateInitialProductSearchRequestFrom(categoryId);
            GetProductsByCategoryResponse response                = _cachedProductCatalogService.GetProductsByCategory(productSearchRequest);
            ProductSearchResultView       productSearchResultView = GetProductSearchResultViewFrom(response);

            return(View("ProductSearchResults", productSearchResultView));
        }
Exemplo n.º 6
0
        public JsonResult GetProductsByAjax(JsonProductSearchRequest jsonProductSearchRequest)
        {
            GetProductsByCategoryRequest  productSearchRequest = GenerateProductSearchRequestFrom(jsonProductSearchRequest);
            GetProductsByCategoryResponse response             = _productService.GetProductsByCategory(productSearchRequest);

            ProductSearchResultView productSearchResultView = GetProductSearchResultViewFrom(response);

            return(Json(productSearchResultView));
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        /// <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));
        }
Exemplo n.º 12
0
        /// <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);
        }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 16
0
        /// <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);
        }