private IEnumerable <ProductDto> GetAllProductsMatchingQuery(GetProductsByCategoryRequest request)
        {
            var queryDtoSpec = new ProductDtoIsInCategorySpecification(request.CategoryId)
                               .And(new ProductDtoIsInColourSpecification(request.ColourIds))
                               .And(new ProductDtoIsMadeByBrandSpecification(request.BrandIds))
                               .And(new ProductDtoIsInSizeSpecification(request.SizeIds));

            IEnumerable <ProductDto> productsMatchingRefinement =
                _presentationRepository.FindBySpec <ProductDto>(queryDtoSpec);


            // TODO: Correct Sort By Logic)
            //switch (request.SortBy)
            //{
            //    case ProductsSortBy.PriceLowToHigh:
            //        productsMatchingRefinement = productsMatchingRefinement.OrderBy(p => p.Price);
            //        break;
            //    case ProductsSortBy.PriceHighToLow:
            //        productsMatchingRefinement = productsMatchingRefinement.OrderByDescending(p => p.Price);
            //        break;
            //}

            return(productsMatchingRefinement);
        }