src/Core/Content/Product/SalesChannel/Review/ProductReviewRoute.php line 50

  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Content\Product\SalesChannel\Review;
  3. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\MultiFilter;
  7. use Shopware\Core\Framework\Log\Package;
  8. use Shopware\Core\Framework\Plugin\Exception\DecorationPatternException;
  9. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. #[Route(defaults: ['_routeScope' => ['store-api']])]
  13. #[Package('inventory')]
  14. class ProductReviewRoute extends AbstractProductReviewRoute
  15. {
  16.     /**
  17.      * @internal
  18.      */
  19.     public function __construct(private readonly EntityRepository $repository)
  20.     {
  21.     }
  22.     public function getDecorated(): AbstractProductReviewRoute
  23.     {
  24.         throw new DecorationPatternException(self::class);
  25.     }
  26.     #[Route(path'/store-api/product/{productId}/reviews'name'store-api.product-review.list'methods: ['POST'], defaults: ['_entity' => 'product_review'])]
  27.     public function load(string $productIdRequest $requestSalesChannelContext $contextCriteria $criteria): ProductReviewRouteResponse
  28.     {
  29.         $active = new MultiFilter(MultiFilter::CONNECTION_OR, [new EqualsFilter('status'true)]);
  30.         if ($customer $context->getCustomer()) {
  31.             $active->addQuery(new EqualsFilter('customerId'$customer->getId()));
  32.         }
  33.         $criteria->setTitle('product-review-route');
  34.         $criteria->addFilter(
  35.             new MultiFilter(MultiFilter::CONNECTION_AND, [
  36.                 $active,
  37.                 new MultiFilter(MultiFilter::CONNECTION_OR, [
  38.                     new EqualsFilter('product.id'$productId),
  39.                     new EqualsFilter('product.parentId'$productId),
  40.                 ]),
  41.             ])
  42.         );
  43.         $result $this->repository->search($criteria$context->getContext());
  44.         return new ProductReviewRouteResponse($result);
  45.     }
  46. }