Esempio n. 1
0
        public async Task <ActionResult <IReadOnlyList <ProductDto> > > GetProducts([FromQuery] ProductSpecificationParams productParams)
        {
            var specification = new ProductSpecification(productParams);
            var products      = await _repository.ListAsync(specification);

            return(Ok(_mapper.Map <IReadOnlyList <Product>, IReadOnlyList <ProductDto> >(products)));
        }
        public ProductsWithTypesAndBrandsSpecification(ProductSpecificationParams productsParams)
            : base(criteria: p =>
                   (string.IsNullOrEmpty(productsParams.Search) || p.Name.ToLower().Contains(productsParams.Search)) &&
                   (!productsParams.BrandId.HasValue || p.ProductBrandId == productsParams.BrandId) &&
                   (!productsParams.TypeId.HasValue || p.ProductTypeId == productsParams.TypeId)
                   )
        {
            IncludeBrandsAndTypes();
            ApplyPaging(CalculateSkip(productsParams.PageSize, productsParams.PageIndex), productsParams.PageSize);

            if (!string.IsNullOrEmpty(productsParams.SortBy))
            {
                switch (productsParams.SortBy)
                {
                case "priceAsc":
                    AddOrderBy(p => p.Price);
                    break;

                case "priceDesc":
                    AddOrderByDescending(p => p.Price);
                    break;

                default:
                    AddOrderBy(p => p.Name);
                    break;
                }
            }
            else
            {
                AddOrderBy(p => p.Name);
            }
        }
 public ProductWithFiltersForCountSpecification(ProductSpecificationParams productParams)
     : base(p =>
            (string.IsNullOrEmpty(productParams.Search) || p.Name.ToLower().Contains(productParams.Search)) && // search product by name
            (!productParams.BrandId.HasValue || p.ProductBrandId == productParams.BrandId) &&                  // search prodcut by brand id and
            (!productParams.TypeId.HasValue || p.ProductTypeId == productParams.TypeId))                       // search product by type id
 {
 }
Esempio n. 4
0
        public async Task <ActionResult <IReadOnlyList <Product> > > GetProducts([FromQuery] ProductSpecificationParams param)
        {
            var spec     = new ProductsWithTypesAndBrandSpecification(param);
            var products = await ProductRepository.GetListWithSpecification(spec);

            return(Ok(mapper.Map <IReadOnlyList <Product>, IReadOnlyList <ProductToReturnDTO> >(products)));
        }
 public ProductsWithFiltersForCountSpecification(ProductSpecificationParams productsParams)
     : base(criteria: p =>
            (string.IsNullOrEmpty(productsParams.Search) || p.Name.ToLower().Contains(productsParams.Search)) &&
            (!productsParams.BrandId.HasValue || p.ProductBrandId == productsParams.BrandId) &&
            (!productsParams.TypeId.HasValue || p.ProductTypeId == productsParams.TypeId)
            )
 {
 }
Esempio n. 6
0
        public async Task <IActionResult> GetProductSpecifications([FromQuery] ProductSpecificationParams productSpecificationParams)
        {
            var productSpecifications = await _repository.GetProductSpecifications(productSpecificationParams);

            var productSpecificationsToReturn = _mapper.Map <IEnumerable <ProductSpecificationForListDto> >(productSpecifications);

            Response.AddPagination(productSpecifications.CurrentPage, productSpecifications.PageSize, productSpecifications.TotalCount, productSpecifications.TotalPages);
            return(Ok(productSpecificationsToReturn));
        }
        public async Task <ActionResult <Pagination <ProductToReturnDto> > > GetProducts(
            [FromQuery] ProductSpecificationParams productParams)
        {
            var specification      = new ProductsWithTypesAndBrandsSpecification(productParams);
            var countSpecification = new ProductWithFiltersForCountSpecification(productParams);
            var totalItemsCount    = await _productRepository.CountAsync(countSpecification);

            var products = await _productRepository.GetListWithSpecification(specification);

            var data = _mapper.Map <IReadOnlyList <Product>, IReadOnlyList <ProductToReturnDto> >(products);

            return(Ok(new Pagination <ProductToReturnDto>(productParams.PageIndex, productParams.PageSize,
                                                          totalItemsCount, data)));
        }
Esempio n. 8
0
        public async Task <ActionResult <Pagination <ProductDto> > > GetProducts([FromQuery] ProductSpecificationParams productParameters)
        {
            var specification      = new ProductsWithTypesAndBrandsSpecification(productParameters);
            var countSpecification = new ProductWithFiltersForCountSpecification(productParameters);
            var totalItems         = await _productsRepo.CountAsync(countSpecification);

            var products = await _productsRepo.ListAsync(specification);

            var data = _mapper.Map <IReadOnlyList <Product>, IReadOnlyList <ProductDto> >(products);

            var result = new Pagination <ProductDto>(productParameters.PageIndex, productParameters.PageSize, totalItems,
                                                     data);

            return(Ok(result));
        }
Esempio n. 9
0
        public async Task <ActionResult <GenericPagination <ProductDTO> > > GetProducts(
            [FromQuery] ProductSpecificationParams productsParams)
        {
            var productsWithTypesAndBrandsSpec = new ProductsWithTypesAndBrandsSpecification(productsParams);
            var productCountSpec = new ProductsWithFiltersForCountSpecification(productsParams);

            var productsCount = await _productRepo.CountAsync(productCountSpec);

            var products = await _productRepo.GetAllAsync(productsWithTypesAndBrandsSpec);

            var productsDTO = _mapper.Map <IReadOnlyList <Product>, IReadOnlyList <ProductDTO> >(products);

            return(Ok(new GenericPagination <ProductDTO>(
                          productsParams.PageIndex,
                          productsParams.PageSize,
                          productsCount,
                          productsDTO)
                      ));
        }
Esempio n. 10
0
        public async Task <ActionResult <Pagination <ProductDTO> > > GetProducts(
            [FromQuery] ProductSpecificationParams productParams)
        {
            var spec = new ProductsWithRelatedSpecification(productParams);

            var countSpec = new ProductsWithFiltersForCountSpecification(productParams);

            var totalItems = await _productRepository.CountAsync(countSpec);

            var products = await _productRepository.ListAsync(spec);

            var data = _mapper.Map <IReadOnlyList <Product>, IReadOnlyList <ProductDTO> >(products);

            return(Ok(new Pagination <ProductDTO>()
            {
                Count = totalItems,
                Data = data,
                PageIndex = productParams.PageIndex,
                PageSize = productParams.PageSize,
            }));
        }
        public async Task <ActionResult <Pagination <ProductToReturnDto> > > GetProducts(
            [FromQuery] ProductSpecificationParams productParams)
        {
            var specifications = new ProductsWithTypesAndBrandsSpecification(productParams);

            var countSpec = new ProductsWithFiltersForCountSpecification(productParams);

            var totalItems = await _productsRepository.CountAsync(countSpec);

            var products = await _productsRepository.ListAsync(specifications);

            if (products == null)
            {
                return(NotFound(new ApiResponse(404)));
            }

            var data = _mapper.Map <IReadOnlyList <Product>, IReadOnlyList <ProductToReturnDto> >(products);

            return(Ok(new Pagination <ProductToReturnDto>(productParams.PageIndex, productParams.PageSize,
                                                          totalItems, data)));
        }
Esempio n. 12
0
        public ProductSpecification(ProductSpecificationParams productParams)
            : base(x =>
                   (!productParams.BrandId.HasValue || x.ProductBrandId == productParams.BrandId) && (!productParams.TypeId.HasValue || x.ProductTypeId == productParams.TypeId)
                   )
        {
            AddInclude(x => x.ProductType);
            AddInclude(x => x.ProductBrand);
            AddInclude("ProductImages.Image");
            ApplyPaging(productParams.PageSize * (productParams.PageIndex - 1), productParams.PageSize);

            AddOrderBy(x => x.Name);

            if (!String.IsNullOrEmpty(productParams.Sort))
            {
                switch (productParams.Sort)
                {
                case "nameAsc":
                    AddOrderBy(x => x.Name);
                    break;

                case "nameDesc":
                    AddOrderByDesc(x => x.Name);
                    break;

                case "priceAsc":
                    AddOrderBy(x => x.Price);
                    break;

                case "priceDesc":
                    AddOrderByDesc(x => x.Price);
                    break;

                default:
                    AddOrderBy(x => x.Name);
                    break;
                }
            }
        }
Esempio n. 13
0
        public async Task <ActionResult <Pagination <ProductToReturnDto> > > GetProducts([FromQuery] ProductSpecificationParams @params)
        {
            var spec      = new ProductsWithTypesAndBrandsSpecification(@params);
            var countSpec = new ProductWithFiltersForCountSpecification(@params);

            var totalItems = await _productRepository.CountAsync(countSpec);

            var products = await _productRepository.GetEntitiesWithSpecification(spec);

            var data = _mapper.Map <IReadOnlyList <Product>, IReadOnlyList <ProductToReturnDto> >(products);

            return(Ok(new Pagination <ProductToReturnDto>
            {
                Count = totalItems,
                Data = data,
                PageIndex = @params.PageIndex,
                PageSize = @params.PageSize
            }));
        }
Esempio n. 14
0
        public async Task <PagedList <ProductSpecification> > GetProductSpecifications(ProductSpecificationParams productParams)
        {
            var productSpecifications = _context.ProductSpecifications.OrderBy(p => p.Name).AsQueryable();

            if (!string.IsNullOrEmpty(productParams.IsActive))
            {
                if (productParams.IsActive == "active")
                {
                    productSpecifications = productSpecifications.Where(p => p.IsActive == true);
                }
                else
                {
                    productSpecifications = productSpecifications.Where(p => p.IsActive == false);
                }
            }

            if (!string.IsNullOrEmpty(productParams.Column) && productParams.Column == "name" && !string.IsNullOrEmpty(productParams.Sorting))
            {
                if (productParams.Sorting == "ascending")
                {
                    productSpecifications = productSpecifications.OrderBy(p => p.Name);
                }
                else
                {
                    productSpecifications = productSpecifications.OrderByDescending(p => p.Name);
                }
            }

            if (!string.IsNullOrEmpty(productParams.Column) && productParams.Column == "series" && !string.IsNullOrEmpty(productParams.Sorting))
            {
                if (productParams.Sorting == "ascending")
                {
                    productSpecifications = productSpecifications.OrderBy(p => p.Series);
                }
                else
                {
                    productSpecifications = productSpecifications.OrderByDescending(p => p.Series);
                }
            }

            if (!string.IsNullOrEmpty(productParams.Column) && productParams.Column == "manufacturer" && !string.IsNullOrEmpty(productParams.Sorting))
            {
                if (productParams.Sorting == "ascending")
                {
                    productSpecifications = productSpecifications.OrderBy(p => p.Manufacturer);
                }
                else
                {
                    productSpecifications = productSpecifications.OrderByDescending(p => p.Manufacturer);
                }
            }

            return(await PagedList <ProductSpecification> .CreateAsync(productSpecifications, productParams.PageNumber, productParams.PageSize));
        }