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); }
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); }