Exemple #1
0
        public async Task GetAllProductsWithFiltersAndPaging()
        {
            var options = new DbContextOptionsBuilder <WHMSDbContext>().UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()).Options;

            using var context = new WHMSDbContext(options);
            for (int i = 0; i < 100; i++)
            {
                var product = new Product
                {
                    ProductName      = "Test Product",
                    ShortDescription = "Test Product",
                    WebsitePrice     = 23,
                    BrandId          = i % 2,
                };
                context.Products.Add(product);
            }

            await context.SaveChangesAsync();

            var mockInventoryService = new Mock <IInventoryService>();
            var service = new ProductsService(context, mockInventoryService.Object);

            var filter = new ProductFilterInputModel {
                BrandId = 1
            };
            var products = service.GetAllProducts <ProductDetailsViewModel>(filter);

            Assert.Equal(GlobalConstants.PageSize, products.Count());
            foreach (var item in products)
            {
                Assert.Equal(1, item.BrandId);
            }
        }
        public IActionResult ManageProducts(ProductFilterInputModel input)
        {
            var model = new ManageProductsViewModel()
            {
                Page       = input.Page,
                Products   = this.productService.GetAllProducts <ProductsViewModel>(input),
                PagesCount = (int)Math.Ceiling(this.productService.GetAllProductsCount(input) / (double)GlobalConstants.PageSize),
                Filters    = input,
            };

            return(this.View(model));
        }
Exemple #3
0
        public IEnumerable <T> GetAllProducts <T>(ProductFilterInputModel input)
        {
            var filteredList = this.FilterProducts(input);

            var products =
                filteredList
                .Skip((input.Page - 1) * GlobalConstants.PageSize)
                .Take(GlobalConstants.PageSize)
                .To <T>()
                .ToList();

            return(products);
        }
Exemple #4
0
        private IQueryable <Product> FilterProducts(ProductFilterInputModel input)
        {
            var filteredList = this.context.Products.Where(x => x.IsDeleted == false);

            filteredList = input.Sorting switch
            {
                ProductsSorting.Id => filteredList.OrderBy(p => p.Id),
                ProductsSorting.IdDesc => filteredList.OrderByDescending(p => p.Id),
                ProductsSorting.Alphabetically => filteredList.OrderBy(p => p.SKU),
                ProductsSorting.AlphabeticallyDesc => filteredList.OrderByDescending(p => p.SKU),
                ProductsSorting.Price => filteredList.OrderBy(p => p.WebsitePrice),
                ProductsSorting.PriceDesc => filteredList.OrderByDescending(p => p.WebsitePrice),
                _ => filteredList,
            };
            if (!string.IsNullOrEmpty(input.Keyword))
            {
                filteredList = filteredList.Where(x => x.SKU.Contains(input.Keyword) || x.ProductName.Contains(input.Keyword));
            }

            if (input.BrandId != null)
            {
                filteredList = filteredList.Where(x => x.BrandId == input.BrandId);
            }

            if (input.ManufacturerId != null)
            {
                filteredList = filteredList.Where(x => x.ManufacturerId == input.ManufacturerId);
            }

            if (input.ConditionId != null)
            {
                filteredList = filteredList.Where(x => x.ConditionId == input.ConditionId);
            }

            return(filteredList);
        }
Exemple #5
0
        public int GetAllProductsCount(ProductFilterInputModel input)
        {
            var filteredProducts = this.FilterProducts(input);

            return(filteredProducts.Count());
        }