Beispiel #1
0
        public ProductsWithBrandsAndTypesSpecification(ProductsSpecParams productsParams)
            : base(x =>
                   (string.IsNullOrEmpty(productsParams.Search) || x.Name.ToLower()
                    .Contains(productsParams.Search)) &&
                   (!productsParams.BrandId.HasValue || x.ProductBrandId == productsParams.BrandId) &&
                   (!productsParams.TypeId.HasValue || x.ProductTypeId == productsParams.TypeId)
                   )
        {
            AddInclude(p => p.ProductBrand);
            AddInclude(p => p.ProductType);
            AddOrderBy(p => p.Name);
            AddPagination(productsParams.PageSize * (productsParams.PageIndex - 1), productsParams.PageSize);


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

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

                default:
                    AddOrderBy(p => p.Name);
                    break;
                }
            }
        }
        public async Task <ActionResult <Pagination <ProductDto> > > getProducts([FromQuery] ProductsSpecParams ProductParams)
        {
            var spec      = new ProductWithBrandAndTypesSpecification(ProductParams);
            var countSpec = new ProductsWithFiltersSpecification(ProductParams); //to send the count of items that fulfil the query.
            var products  = await _productRepo.ListAsync(spec);

            var count = await _productRepo.CountAsync(countSpec);

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

            return(Ok(new Pagination <ProductDto>(ProductParams.PageIndex, ProductParams.PageSize,
                                                  count, data)));
        }
Beispiel #3
0
        public async Task <ActionResult <Pagination <ProductDto> > > GetProducts([FromQuery] ProductsSpecParams productParams)
        {
            var spec = new ProductsWithTypesAndBrandsSpecification(productParams);

            var countSpec = new ProductWithFiltersForCountSpecification(productParams);

            var totalItems = await _productsRepository.CountAsync(countSpec);

            var product = await _productsRepository.List(spec);

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

            return(Ok(new Pagination <ProductDto>(productParams.PageIndex, productParams.PageSize, totalItems, data)));
        }
        public async Task <ActionResult <IReadOnlyList <DTOProducts> > > GetProducts(
            [FromQuery] ProductsSpecParams ProductsParams)
        {
            var spec      = new ProductsWithBrandsAndTypesSpecification(ProductsParams);
            var countSpec = new ProductsWithFiltersForCountSpecification(ProductsParams);
            var products  = await _productsRepo.ListWithSpecAsync(spec);

            var totalcount = await _productsRepo.CountAsync(countSpec);

            var data = _mapper.Map <IReadOnlyList <Products>, IReadOnlyList <DTOProducts> >(products);

            if (data == null)
            {
                return(NotFound(new ApiResponse(404)));
            }
            return(Ok(new Pagination <DTOProducts>(ProductsParams.PageSize, ProductsParams.PageIndex, totalcount, data)));
        }
Beispiel #5
0
        public async Task <ActionResult <Pagination <ProductToReturnDto> > > Getproducts([FromQuery] ProductsSpecParams productsSpecParams)
        {
            //con filtos y ordenaciones
            var spec = new ProductsWithTypesAndBrandsSpecification(productsSpecParams);

            //para contar los prductos solo con filtros
            var countSpec = new ProductWithFiltersForCountSpecification(productsSpecParams);


            var ti = await _unitOfWork.Repository <Product>().CountAsync(countSpec);

            var totalItems = await _unitOfWork.Repository <Product>().CountAsync(countSpec);

            var productos = await _unitOfWork.Repository <Product>().ListAsync(spec);

            var data = _mapper.Map <IReadOnlyList <ProductToReturnDto> >(productos);

            return(Ok(new Pagination <ProductToReturnDto> {
                Data = data, Count = totalItems, PageSize = productsSpecParams.PageSize, PageIndex = productsSpecParams.PageIndex
            }));
        }
Beispiel #6
0
        public async Task <ActionResult <Pagination <ProductToReturnDto> > > GetProducts([FromQuery] ProductsSpecParams prodParams)
        {
            var spec       = new ProductsWithTypesAndBrandsSpecification(prodParams);
            var countSpect = new ProductsWithFiltersForCountSpecification(prodParams);

            var totalItems = await _productRepo.ContAsync(countSpect);

            var Fullproducts = await _productRepo.GetEntityListWithSpecAsync(spec);

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

            return(Ok(new Pagination <ProductToReturnDto> {
                Count = totalItems,
                Data = data,
                PageIndex = prodParams.PageIndex,
                PageSize = prodParams.PageSize
            }));
        }
Beispiel #7
0
        public async Task <ActionResult <Pagination <ProductToReturnDTO> > > GetProducts([FromQuery] ProductsSpecParams productsSpecParams)
        {
            var spec = new ProductsWithTypesAndBrandsSpecification(productsSpecParams);

            var countSpec = new ProductsWithFiltersForCountsSpecification(productsSpecParams);

            var totalItems = await productRepo.CountAsync(countSpec);

            var products = await productRepo.ListAsync(spec);

            var data = mapper.Map <IReadOnlyList <Product>, IReadOnlyList <ProductToReturnDTO> >(products);

            //return Ok(data);
            return(Ok(new Pagination <ProductToReturnDTO>(productsSpecParams.PageIndex, productsSpecParams.PageSize, totalItems, data)));
        }