示例#1
0
        public async Task <ActionResult <Pagination <ProductToReturnDto> > > GetProducts([FromQuery] ProductSpecParams specParams)
        {
            ProductsWithTypesAndBrandsSpecification spec = new ProductsWithTypesAndBrandsSpecification(specParams);

            ProductsWithFiltersForCountSpecification countSpec = new ProductsWithFiltersForCountSpecification(specParams);

            var totalItems = await _productRepo.CountAsync(countSpec);

            IReadOnlyList <Product> products = await _productRepo.ListAsync(spec);

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

            Pagination <ProductToReturnDto> pagination = new Pagination <ProductToReturnDto>
            {
                PageIndex = specParams.PageIndex,
                PageSize  = specParams.PageSize,
                Count     = totalItems,
                Data      = data
            };

            return(Ok(pagination));
        }
示例#2
0
        public async Task <ActionResult> DeleteProductPhoto(int id, int photoId)
        {
            var spec    = new ProductsWithTypesAndBrandsSpecification(id);
            var product = await _unitOfWork.Repository <Product>().GetEntityWithSpec(spec);

            var photo = product.Photos.SingleOrDefault(x => x.Id == photoId);

            if (photo != null)
            {
                if (photo.IsMain)
                {
                    return(BadRequest(new ApiResponse(400, "You cannot delete the main photo.")));
                }

                // so we dont delete seeded photo
                if (photo.Id > 18)
                {
                    _photoService.DeleteFromDisk(photo);
                }
            }
            else
            {
                return(BadRequest(new ApiResponse(400, "Photo does not exist")));
            }

            product.RemovePhoto(photoId);

            _unitOfWork.Repository <Product>().Update(product);

            var result = await _unitOfWork.Complete();

            if (result <= 0)
            {
                return(BadRequest(new ApiResponse(400, "Problem adding photo product")));
            }

            return(Ok());
        }
        //public async Task<ActionResult<List<Product>>> GetProducts()
        public async Task <ActionResult <Pagination <ProductToReturnDto> > > GetProducts(
            [FromQuery] ProductSpecParams productParams)
        {
            //var products = await _context.Products.ToListAsync();
            //var products = await _repo.GetProductsAsync();
            //var products = await _productsRepo.ListAllAsync();

            var spec = new ProductsWithTypesAndBrandsSpecification(
                productParams);

            var countSpec = new ProductWithFiltersForCountSpecification(productParams);

            var totalItems = await _productsRepo.CountAsync(countSpec);

            var products = await _productsRepo.ListAsync(spec);

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


            ////return products.Select(product => new ProductToReturnDto
            ////{
            ////    Id = product.Id,
            ////    Name = product.Name,
            ////    Description = product.Description,
            ////    PictureUrl = product.PictureUrl,
            ////    Price = product.Price,
            ////    ProductBrand = product.ProductBrand.Name,
            ////    ProductType = product.ProductType.Name
            ////}).ToList();
            ////return Ok(products);

            //return Ok(_mapper.Map<IReadOnlyList<Product>,
            //  IReadOnlyList<ProductToReturnDto>>(products));

            return(Ok(new Pagination <ProductToReturnDto>(productParams.PageIndex,
                                                          productParams.PageSize, totalItems, data)));
        }
示例#4
0
        public async Task <ActionResult <ProductToReturnDto> > GetProduct(int id)
        {
            //1- return await _context.Products.FindAsync(id);// After Interfaces made
            //2- return await _repo.GetProductByIdAsync(id);
            //3- return await _productsRepo.GetByIdAsync(id);

            /* 4-
             * var spec = new ProductsWithTypesAndBrandsSpecification(id);
             *
             * return await _productsRepo.GetEntityWithSpec(spec);
             */

            var spec = new ProductsWithTypesAndBrandsSpecification(id);

            var product = await _unitOfWork.Repository <Product>().GetEntityWithSpec(spec);

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

            return(_mapper.Map <Product, ProductToReturnDto>(product));
        }
示例#5
0
        public async Task <ActionResult <ProductToReturnDto> > GetProduct(int id)
        {
            //return Ok ( await _productsRepo.GetByIdAsync(id));
            var spec = new ProductsWithTypesAndBrandsSpecification(id);
            //var product = await _productsRepo.ListAsync(spec);
            var product = await _productsRepo.GetEntityWithSpec(spec);

            //return Ok( product );
            // return new ProductToReturnDto
            // {
            //     Id = product.Id,
            //     Name = product.Name,
            //     Description = product.Description,
            //     Price = product.Price
            // };

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

            return(_mapper.Map <Product, ProductToReturnDto>(product));
        }
示例#6
0
        public async Task <ActionResult <ProductToReturnDTO> > GetProduct(int id)
        {
            var spec = new ProductsWithTypesAndBrandsSpecification(id);

            var product = await this.productRepo.GetEntityWithSpec(spec);

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

            return(this.mapper.Map <Product, ProductToReturnDTO>(product));
            // return new ProductToReturnDTO()
            // {
            //     Id = product.Id,
            //     Name = product.Name,
            //     Description = product.Description,
            //     Price = product.Price,
            //     PictureUrl = product.PictureUrl,
            //     ProductBrand = product.ProductBrand.Name,
            //     ProductType = product.ProductType.Name
            // };
        }
示例#7
0
        [HttpGet]                                                                                                                     // Pagination v 65
        public async Task <ActionResult <Pagination <ProductToReturnDto> > > GetProducts([FromQuery] ProductSpecParams productParams) // if class check for body but we sent as query for get so used "fromQuery"// v 64
        {
            var spec       = new ProductsWithTypesAndBrandsSpecification(productParams);                                              // sort v 59
            var countSpec  = new ProductWithFiltersForCountSpecification(productParams);                                              //v 65
            var totalItems = await _productsRepo.CountAsync(countSpec);                                                               // 65

            var products = await _productsRepo.ListAsync(spec);


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

            return(Ok(new Pagination <ProductToReturnDto>(productParams.PageIndex, productParams.Pagesize, totalItems, data)));
            // return products.Select(product => new ProductToReturnDto
            // {
            //     Id = product.Id,
            //     Name = product.Name,
            //     Description = product.Description,
            //     PictureUrl = product.PictureUrl,
            //     Price = product.Price,
            //     ProductBrand = product.ProductBrand.Name,
            //     ProductType = product.ProductType.Name
            // }).ToList();
        }
示例#8
0
        public async Task <ActionResult <ProductToReturnDto> > SetMainPhoto(int id, int photoId)
        {
            var spec    = new ProductsWithTypesAndBrandsSpecification(id);
            var product = await _unitOfWork.Repository <Product>().GetEntityWithSpec(spec);

            if (product.Photos.All(x => x.Id != photoId))
            {
                return(NotFound());
            }

            product.SetMainPhoto(photoId);

            _unitOfWork.Repository <Product>().Update(product);

            var result = await _unitOfWork.Complete();

            if (result <= 0)
            {
                return(BadRequest(new ApiResponse(400, "Problem adding photo product")));
            }

            return(_mapper.Map <Product, ProductToReturnDto>(product));
        }
示例#9
0
        public async Task <ActionResult <ProductToReturnDtos> > GetProductById(int id)
        {
            //return await _productRepo.GetByIdAsync(id);
            var spec    = new ProductsWithTypesAndBrandsSpecification(id);
            var product = await _productRepo.GetEntityWithSpec(spec);

            if (product == null)
            {
                return(NotFound(new ApiResponse(404)));
            }
            //DTO
            // return new ProductToReturnDtos
            // {
            //     Id = product.Id,
            //     Name = product.Name,
            //     Description = product.Description,
            //     Price = product.Price,
            //     PictureUrl = product.PictureUrl,
            //     ProductType = product.ProductType.Name,
            //     ProductBrand = product.ProductBrand.Name
            // };
            return(_mapper.Map <Product, ProductToReturnDtos>(product)); // map from product to productToReturnDtos
        }
示例#10
0
        public async Task <ActionResult <ProductToReturnDto> > GetProduct(int id)

        {
            var spec    = new ProductsWithTypesAndBrandsSpecification(id);
            var product = await _productsRepo.GetEntityWithSpec(spec);

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

            return(_mapper.Map <Product, ProductToReturnDto>(product));

            /* return new ProductToReturnDto
             * {
             *   Id = product.Id,
             *   Name = product.Name,
             *   Description = product.Description,
             *   PictureUrl = product.PictureUrl,
             *   Price = product.Price,
             *   ProductType = product.ProductType.Name,
             *   ProductBrand = product.ProductBrand.Name
             * };*/
        }
示例#11
0
        public async Task <ActionResult <Pagination <ProductToReturnDTO> > > GetProducts([FromQuery] ProductSpecsParams productParams)
        {
            var spec = new ProductsWithTypesAndBrandsSpecification(productParams);

            var countSpec = new ProductWithFilterForCountSpecification(productParams);

            var totalItems = await this.productRepo.CountAsync(countSpec);

            var products = await this.productRepo.ListAsync(spec);

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

            return(Ok(new Pagination <ProductToReturnDTO>(productParams.PageIndex, productParams.PageSize, totalItems, data)));
            // return products.Select(p => new ProductToReturnDTO()
            // {
            //     Id = p.Id,
            //     Name = p.Name,
            //     Description = p.Description,
            //     Price = p.Price,
            //     PictureUrl = p.PictureUrl,
            //     ProductBrand = p.ProductBrand.Name,
            //     ProductType = p.ProductType.Name
            // }).ToList();
        }
示例#12
0
        public async Task <ActionResult <ProductToReturnDto> > GetProducts(
            [FromQuery] ProductSpecParams productParams)
        {
            var spec = new ProductsWithTypesAndBrandsSpecification(productParams);

            var results = await _dataAccess.GetProductByAsync(
                productParams.PageIndex,
                productParams.PageSize,
                productParams.Sort,
                productParams.BrandId,
                productParams.TypeId,
                productParams.Search);

            var totalItems = results.TotalCount;

            var products = results.Items;

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



            return(Ok(new Pagination <ProductToReturnDto>(productParams.PageIndex,
                                                          productParams.PageSize, totalItems, data)));
        }
示例#13
0
        public async Task <ActionResult> DeleteProduct(int id)
        {
            var spec    = new ProductsWithTypesAndBrandsSpecification(id);
            var product = await _unitOfWork.Repository <Product>().GetEntityWithSpec(spec);

            foreach (var photo in product.Photos)
            {
                if (photo.Id > 18)
                {
                    _photoService.DeleteFromDisk(photo);
                }
            }

            _unitOfWork.Repository <Product>().Delete(product);

            var result = await _unitOfWork.Complete();

            if (result <= 0)
            {
                return(BadRequest(new ApiResponse(400, "Problem deleting product")));
            }

            return(Ok());
        }
示例#14
0
        public async Task <ActionResult <ProductToReturnDto> > GetProduct(int id)
        {
            var     spec    = new ProductsWithTypesAndBrandsSpecification(id);
            Product product = await _genericProductRepo.GetEntityWithSpec(spec);

            if (product == null)
            {
                // Usa el objeto ApiResponse como response, se envia serializado.
                return(NotFound(new ApiResponse(404)));
            }

            return(_mapper.Map <Product, ProductToReturnDto>(product));

            /*      return new ProductToReturnDto()
             *   {
             *       Id = product.Id,
             *       Name = product.Name,
             *       Description = product.Description,
             *       Price = product.Price,
             *       PictureUrl = product.PictureUrl,
             *       ProductBrand = product.ProductBrand.Name,
             *       ProductType = product.ProductType.Name
             *   }; */
        }
        public async Task <IActionResult> GetProduct(int id)
        {
            var spec = new ProductsWithTypesAndBrandsSpecification(id);

            return(Ok(await _productRepository.GetEntityWithSpec(spec)));
        }
        public async Task <IActionResult> GetProducts([FromQuery] ProductParams productParams)
        {
            var spec = new ProductsWithTypesAndBrandsSpecification(productParams);

            return(Ok(await _productRepository.ListAsync(spec)));
        }
示例#17
0
        public async Task <ActionResult <Product> > GetProduct(int id)
        {
            var spec = new  ProductsWithTypesAndBrandsSpecification(id);

            return(await _productsRepo.GetEntityWithSpec(spec));
        }