Skip to content

Commit

Permalink
Move applyToCollection logic to private method and use in both cases
Browse files Browse the repository at this point in the history
  • Loading branch information
TheMilek committed Dec 20, 2023
1 parent b318041 commit 31374d6
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,8 @@
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface;
use Doctrine\ORM\QueryBuilder;
use Sylius\Bundle\ApiBundle\Context\UserContextInterface;
use Sylius\Bundle\ApiBundle\SectionResolver\AdminApiSection;
use Sylius\Bundle\CoreBundle\SectionResolver\SectionProviderInterface;
use Sylius\Component\Core\Model\AdminUserInterface;
use Sylius\Component\Core\Model\OrderInterface;

/** @experimental */
Expand All @@ -45,28 +43,43 @@ public function applyToCollection(
string $operationName = null,
array $context = [],
): void {
if (!is_a($resourceClass, OrderInterface::class, true)) {
return;
}

if ($this->sectionProvider->getSection() instanceof AdminApiSection) {

$stateParameter = $queryNameGenerator->generateParameterName('state');
$rootAlias = $queryBuilder->getRootAliases()[0];

$queryBuilder
->andWhere(sprintf('%s.state != :%s', $rootAlias, $stateParameter))
->setParameter($stateParameter, $this->orderStatesToFilterOut)
;
}
$this->filterOutOrders($queryBuilder, $queryNameGenerator, $resourceClass);
}

/**
* @param array<mixed> $context
* @param array<mixed> $identifiers
*/
public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, array $identifiers, string $operationName = null, array $context = []): void
{
$this->applyToCollection($queryBuilder, $queryNameGenerator, $resourceClass, $operationName, $context);
public function applyToItem(
QueryBuilder $queryBuilder,
QueryNameGeneratorInterface $queryNameGenerator,
string $resourceClass,
array $identifiers,
string $operationName = null,
array $context = []
): void {
$this->filterOutOrders($queryBuilder, $queryNameGenerator, $resourceClass);
}

private function filterOutOrders(
QueryBuilder $queryBuilder,
QueryNameGeneratorInterface $queryNameGenerator,
string $resourceClass,
): void {
if (!is_a($resourceClass, OrderInterface::class, true)) {
return;
}

if (!$this->sectionProvider->getSection() instanceof AdminApiSection) {
return;
}

$stateParameter = $queryNameGenerator->generateParameterName('state');
$rootAlias = $queryBuilder->getRootAliases()[0];

$queryBuilder
->andWhere(sprintf('%s.state != :%s', $rootAlias, $stateParameter))
->setParameter($stateParameter, $this->orderStatesToFilterOut)
;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface;
use Doctrine\ORM\QueryBuilder;
use PhpSpec\ObjectBehavior;
use Sylius\Bundle\ApiBundle\Context\UserContextInterface;
use Sylius\Bundle\ApiBundle\SectionResolver\AdminApiSection;
use Sylius\Bundle\ApiBundle\SectionResolver\ShopApiSection;
use Sylius\Bundle\CoreBundle\SectionResolver\SectionProviderInterface;
Expand Down

0 comments on commit 31374d6

Please sign in to comment.