public async Task <ActionResult <ProductDTO> > GetProduct(int id)
        {
            var spec    = new ProductsWithRelatedSpecification(id);
            var product = await _productRepository.GetEntityWithSpec(spec);

            if (product == null)
            {
                return(NotFound(new ApiResponse((int)HttpStatusCode.NotFound)));
            }

            return(Ok(_mapper.Map <Product, ProductDTO>(product)));
        }
        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,
            }));
        }