Beispiel #1
0
        public FetchProductsResponse FetchProducts(FetchProductsRequest fetchProductsRequest)
        {
            var response = new FetchProductsResponse();

            WithErrorHandling(() =>
            {
                var products = _productRepository.GetAllProducts();

                if (fetchProductsRequest.CategorySlug == "all-categories" && fetchProductsRequest.BrandSlug == "all-brands")
                {
                    products = products
                               .Where(product => product.ProductStatus == ProductStatus.Active);
                }

                if (fetchProductsRequest.CategorySlug != "all-categories" && fetchProductsRequest.BrandSlug != "all-brands")
                {
                    products = products
                               .Where(product => product.ProductStatus == ProductStatus.Active &&
                                      product.Category.Slug == fetchProductsRequest.CategorySlug &&
                                      product.Brand.Slug == fetchProductsRequest.BrandSlug);
                }

                if (fetchProductsRequest.CategorySlug != "all-categories" && fetchProductsRequest.BrandSlug == "all-brands")
                {
                    products = products
                               .Where(product => product.ProductStatus == ProductStatus.Active &&
                                      product.Category.Slug == fetchProductsRequest.CategorySlug);
                }

                if (fetchProductsRequest.CategorySlug == "all-categories" && fetchProductsRequest.BrandSlug != "all-brands")
                {
                    products = products
                               .Where(product => product.ProductStatus == ProductStatus.Active &&
                                      product.Brand.Slug == fetchProductsRequest.BrandSlug);
                }

                var productCount = products.Count();
                products         = products
                                   .Skip((fetchProductsRequest.PageNumber - 1) * fetchProductsRequest.ProductsPerPage)
                                   .Take(fetchProductsRequest.ProductsPerPage)
                                   .ToList();

                var productDtos = products.MapToProductDtos();
                var totalPages  = (int)Math.Ceiling((decimal)productCount / fetchProductsRequest.ProductsPerPage);
                var pages       = Enumerable.Range(1, totalPages).ToArray();

                response.ProductsPerPage  = fetchProductsRequest.ProductsPerPage;
                response.Products         = productDtos;
                response.HasPreviousPages = fetchProductsRequest.PageNumber > 1;
                response.CurrentPage      = fetchProductsRequest.PageNumber;
                response.HasNextPages     = fetchProductsRequest.PageNumber < totalPages;
                response.Pages            = pages;
                response.Messages.Add("Successfully fetched the products");
                response.StatusCode = HttpStatusCode.OK;
            }, response);


            return(response);
        }
Beispiel #2
0
        public FetchProductsResponse FetchProducts(FetchProductsRequest fetchProductsRequest)
        {
            IEnumerable <Product> products = new List <Product>();

            int productCount = 0;

            if (fetchProductsRequest.CategorySlug == "all-categories" && fetchProductsRequest.BrandSlug == "all-brands")
            {
                productCount = _productRepository.GetAllProducts().Count();
                products     = _productRepository.GetAllProducts()
                               .Where(product => product.ProductStatus == ProductStatus.Active)
                               .Skip((fetchProductsRequest.PageNumber - 1) * fetchProductsRequest.ProductsPerPage)
                               .Take(fetchProductsRequest.ProductsPerPage);
            }

            if (fetchProductsRequest.CategorySlug != "all-categories" && fetchProductsRequest.BrandSlug != "all-brands")
            {
                var filteredProducts = _productRepository.GetAllProducts()
                                       .Where(product => product.ProductStatus == ProductStatus.Active &&
                                              product.Category.Slug == fetchProductsRequest.CategorySlug &&
                                              product.Brand.Slug == fetchProductsRequest.BrandSlug);
                productCount = filteredProducts.Count();
                products     = filteredProducts.Skip((fetchProductsRequest.PageNumber - 1) * fetchProductsRequest.ProductsPerPage)
                               .Take(fetchProductsRequest.ProductsPerPage);
            }

            if (fetchProductsRequest.CategorySlug != "all-categories" && fetchProductsRequest.BrandSlug == "all-brands")
            {
                var filteredProducts = _productRepository.GetAllProducts()
                                       .Where(product => product.ProductStatus == ProductStatus.Active &&
                                              product.Category.Slug == fetchProductsRequest.CategorySlug);
                productCount = filteredProducts.Count();
                products     = filteredProducts.Skip((fetchProductsRequest.PageNumber - 1) * fetchProductsRequest.ProductsPerPage)
                               .Take(fetchProductsRequest.ProductsPerPage);
            }

            if (fetchProductsRequest.CategorySlug == "all-categories" && fetchProductsRequest.BrandSlug != "all-brands")
            {
                var filteredProducts = _productRepository.GetAllProducts()
                                       .Where(product => product.ProductStatus == ProductStatus.Active &&
                                              product.Brand.Slug == fetchProductsRequest.BrandSlug);
                productCount = filteredProducts.Count();
                products     = filteredProducts.Skip((fetchProductsRequest.PageNumber - 1) * fetchProductsRequest.ProductsPerPage)
                               .Take(fetchProductsRequest.ProductsPerPage);
            }

            var totalPages = (int)Math.Ceiling((decimal)productCount / fetchProductsRequest.ProductsPerPage);

            int[] pages = Enumerable.Range(1, totalPages).ToArray();

            var productDtos = _messageMapper.MapToProductDtos(products);

            var fetchProductsResponse = new FetchProductsResponse()
            {
                ProductsPerPage  = fetchProductsRequest.ProductsPerPage,
                Products         = productDtos,
                HasPreviousPages = (fetchProductsRequest.PageNumber > 1),
                CurrentPage      = fetchProductsRequest.PageNumber,
                HasNextPages     = (fetchProductsRequest.PageNumber < totalPages),
                Pages            = pages
            };

            return(fetchProductsResponse);
        }