public async Task <ActionResult <Product> > GetProduct(int productId)
        {
            var productSpecification = new ProductWithTypeAndBrandSpecifications(productId);
            var product = await _productRepo.GetByIdWithSpecifications(productSpecification);

            if (product == null)
            {
                return(NotFound(new ApiResponse(StatusCodes.Status404NotFound)));
            }

            var productToReturn = _mapper.Map <ProductToReturnDto>(product);

            return(Ok(productToReturn));
        }
        public async Task <ActionResult <Pagination <ProductToReturnDto> > > GetProducts([FromQuery] ProductQueryParameters parameters)
        {
            var productSpecifications          = new ProductWithTypeAndBrandSpecifications(parameters);
            var numberOfProductsSpecifications = new ProductSpecificationToCountNumberOfProducts(parameters);


            var products = await _productRepo.GetAllWithSpecifications(productSpecifications);

            var totalItems = await _productRepo.CountNumberOfProducts(numberOfProductsSpecifications);

            var productsToReturn = _mapper.Map <IReadOnlyCollection <ProductToReturnDto> >(products);

            return(Ok(new Pagination <ProductToReturnDto>(parameters.PageIndex,
                                                          totalItems, parameters.PageSize, productsToReturn)));
        }