public async Task <IEnumerable <Product> > GetProductListAsync()
        {
            // return await GetAllAsync();

            var spec = new ProductWithCategorySpecification();

            return(await GetAsync(spec));
        }
        public async Task <IEnumerable <ProductModel> > GetProductsByCategoryId(int categoryId)
        {
            var spec        = new ProductWithCategorySpecification(categoryId);
            var productList = await _productRepository.GetAsync(spec);

            var productModels = ObjectMapper.Mapper.Map <IEnumerable <ProductModel> >(productList);

            return(productModels);
        }
        public void Matches_Product_With_Category_Spec()
        {
            var spec = new ProductWithCategorySpecification(ProductBuilder.ProductName1);

            var result = ProductBuilder.GetProductCollection()
                         .AsQueryable()
                         .FirstOrDefault(spec.Criteria);

            Assert.NotNull(result);
            Assert.Equal(ProductBuilder.ProductId1, result.Id);
        }
        public async Task <IEnumerable <Product> > GetProductByNameAsync(string productName)
        {
            var spec = new ProductWithCategorySpecification(productName);

            return(await GetAsync(spec));

            // return await GetAsync(x => x.ProductName.ToLower().Contains(productName.ToLower()));

            //return await _dbContext.Products
            //    .Where(x => x.ProductName.Contains(productName))
            //    .ToListAsync();
        }
        public async Task <Product> GetProductByIdWithCategoryAsync(int productId)
        {
            var spec = new ProductWithCategorySpecification(productId);

            return((await GetAsync(spec)).FirstOrDefault());
        }
        public async Task <IReadOnlyList <Product> > GetProductByIdWithCategoryAsync(long productId)
        {
            var spec = new ProductWithCategorySpecification(productId);

            return(await GetAsync(spec));
        }