mirror of
https://github.com/Sylius/Sylius.git
synced 2026-07-05 20:57:12 +00:00
[ApiBundle] Add common enabled extension for the shop section
This commit is contained in:
parent
4afed8d478
commit
d7274c70cb
4 changed files with 26 additions and 42 deletions
|
|
@ -11,22 +11,20 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Sylius\Bundle\ApiBundle\Doctrine\ORM\QueryExtension\Common;
|
||||
namespace Sylius\Bundle\ApiBundle\Doctrine\ORM\QueryExtension\Shop\Common;
|
||||
|
||||
use ApiPlatform\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
|
||||
use ApiPlatform\Doctrine\Orm\Extension\QueryItemExtensionInterface;
|
||||
use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
|
||||
use ApiPlatform\Metadata\Operation;
|
||||
use Doctrine\ORM\QueryBuilder;
|
||||
use Sylius\Bundle\ApiBundle\SectionResolver\ShopApiSection;
|
||||
use Sylius\Bundle\CoreBundle\SectionResolver\SectionProviderInterface;
|
||||
use Sylius\Resource\Model\ToggleableInterface;
|
||||
|
||||
final readonly class EnabledExtension implements QueryCollectionExtensionInterface, QueryItemExtensionInterface
|
||||
{
|
||||
public function __construct(
|
||||
private SectionProviderInterface $sectionProvider,
|
||||
private string $resourceClass,
|
||||
private string $section,
|
||||
) {
|
||||
public function __construct(private SectionProviderInterface $sectionProvider) {
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -62,11 +60,11 @@ final readonly class EnabledExtension implements QueryCollectionExtensionInterfa
|
|||
QueryNameGeneratorInterface $queryNameGenerator,
|
||||
string $resourceClass,
|
||||
): void {
|
||||
if (!is_a($resourceClass, $this->resourceClass, true)) {
|
||||
if (!is_a($resourceClass, ToggleableInterface::class, true)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!$this->sectionProvider->getSection() instanceof $this->section) {
|
||||
if (!$this->sectionProvider->getSection() instanceof ShopApiSection) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -95,16 +95,6 @@
|
|||
<tag name="api_platform.doctrine.orm.query_extension.item" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
id="sylius_api.doctrine.orm.query_extension.shop.product.enabled"
|
||||
class="Sylius\Bundle\ApiBundle\Doctrine\ORM\QueryExtension\Common\EnabledExtension"
|
||||
>
|
||||
<argument type="service" id="sylius.section_resolver.uri_based" />
|
||||
<argument>%sylius.model.product.class%</argument>
|
||||
<argument>Sylius\Bundle\ApiBundle\SectionResolver\ShopApiSection</argument>
|
||||
<tag name="api_platform.doctrine.orm.query_extension.collection" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
id="sylius_api.doctrine.orm.query_extension.shop.country.channel_based"
|
||||
class="Sylius\Bundle\ApiBundle\Doctrine\ORM\QueryExtension\Shop\Country\ChannelBasedExtension"
|
||||
|
|
@ -177,12 +167,10 @@
|
|||
</service>
|
||||
|
||||
<service
|
||||
id="sylius_api.doctrine.orm.query_extension.shop.product_variant.enabled"
|
||||
class="Sylius\Bundle\ApiBundle\Doctrine\ORM\QueryExtension\Common\EnabledExtension"
|
||||
id="sylius_api.doctrine.orm.query_extension.shop.common.enabled"
|
||||
class="Sylius\Bundle\ApiBundle\Doctrine\ORM\QueryExtension\Shop\Common\EnabledExtension"
|
||||
>
|
||||
<argument type="service" id="sylius.section_resolver.uri_based" />
|
||||
<argument>%sylius.model.product_variant.class%</argument>
|
||||
<argument>Sylius\Bundle\ApiBundle\SectionResolver\ShopApiSection</argument>
|
||||
<tag name="api_platform.doctrine.orm.query_extension.collection" />
|
||||
<tag name="api_platform.doctrine.orm.query_extension.item" />
|
||||
</service>
|
||||
|
|
@ -230,16 +218,6 @@
|
|||
<tag name="api_platform.doctrine.orm.query_extension.item" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
id="sylius_api.doctrine.orm.query_extension.shop.taxon.enabled"
|
||||
class="Sylius\Bundle\ApiBundle\Doctrine\ORM\QueryExtension\Common\EnabledExtension"
|
||||
>
|
||||
<argument type="service" id="sylius.section_resolver.uri_based" />
|
||||
<argument>%sylius.model.taxon.class%</argument>
|
||||
<argument>Sylius\Bundle\ApiBundle\SectionResolver\ShopApiSection</argument>
|
||||
<tag name="api_platform.doctrine.orm.query_extension.item" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
id="sylius_api.doctrine.orm.query_extension.shop.product.enabled_within_product_association"
|
||||
class="Sylius\Bundle\ApiBundle\Doctrine\ORM\QueryExtension\Shop\Product\EnabledWithinProductAssociationExtension"
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace spec\Sylius\Bundle\ApiBundle\Doctrine\ORM\QueryExtension\Common;
|
||||
namespace spec\Sylius\Bundle\ApiBundle\Doctrine\ORM\QueryExtension\Shop\Common;
|
||||
|
||||
use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
|
||||
use ApiPlatform\Metadata\Get;
|
||||
|
|
@ -23,16 +23,13 @@ use Sylius\Bundle\ApiBundle\Serializer\ContextKeys;
|
|||
use Sylius\Bundle\CoreBundle\SectionResolver\SectionProviderInterface;
|
||||
use Sylius\Component\Core\Model\ChannelInterface;
|
||||
use Sylius\Component\Core\Model\ProductVariantInterface;
|
||||
use Sylius\Resource\Model\ToggleableInterface;
|
||||
|
||||
final class EnabledExtensionSpec extends ObjectBehavior
|
||||
{
|
||||
function let(SectionProviderInterface $sectionProvider): void
|
||||
{
|
||||
$this->beConstructedWith(
|
||||
$sectionProvider,
|
||||
ProductVariantInterface::class,
|
||||
ShopApiSection::class,
|
||||
);
|
||||
$this->beConstructedWith($sectionProvider);
|
||||
}
|
||||
|
||||
public function it_does_not_apply_conditions_to_item_for_unsupported_resource(
|
||||
|
|
@ -53,7 +50,7 @@ final class EnabledExtensionSpec extends ObjectBehavior
|
|||
): void {
|
||||
$sectionProvider->getSection()->willReturn($adminApiSection);
|
||||
|
||||
$this->applyToItem($queryBuilder, $queryNameGenerator, ProductVariantInterface::class, []);
|
||||
$this->applyToItem($queryBuilder, $queryNameGenerator, ToggleableInterface::class, []);
|
||||
|
||||
$queryBuilder->getRootAliases()->shouldNotHaveBeenCalled();
|
||||
$queryBuilder->andWhere()->shouldNotHaveBeenCalled();
|
||||
|
|
@ -77,7 +74,7 @@ final class EnabledExtensionSpec extends ObjectBehavior
|
|||
$this->applyToItem(
|
||||
$queryBuilder,
|
||||
$queryNameGenerator,
|
||||
ProductVariantInterface::class,
|
||||
ToggleableInterface::class,
|
||||
[],
|
||||
new Get(),
|
||||
[ContextKeys::CHANNEL => $channel, ContextKeys::LOCALE_CODE => 'en_US'],
|
||||
|
|
@ -102,7 +99,7 @@ final class EnabledExtensionSpec extends ObjectBehavior
|
|||
): void {
|
||||
$sectionProvider->getSection()->willReturn($adminApiSection);
|
||||
|
||||
$this->applyToCollection($queryBuilder, $queryNameGenerator, ProductVariantInterface::class);
|
||||
$this->applyToCollection($queryBuilder, $queryNameGenerator, ToggleableInterface::class);
|
||||
|
||||
$queryBuilder->getRootAliases()->shouldNotHaveBeenCalled();
|
||||
$queryBuilder->andWhere()->shouldNotHaveBeenCalled();
|
||||
|
|
@ -126,7 +123,7 @@ final class EnabledExtensionSpec extends ObjectBehavior
|
|||
$this->applyToCollection(
|
||||
$queryBuilder,
|
||||
$queryNameGenerator,
|
||||
ProductVariantInterface::class,
|
||||
ToggleableInterface::class,
|
||||
new Get(),
|
||||
[ContextKeys::CHANNEL => $channel, ContextKeys::LOCALE_CODE => 'en_US'],
|
||||
);
|
||||
|
|
@ -29,6 +29,11 @@ Sylius\Component\Core\Model\Product:
|
|||
channels: ['@channel_web']
|
||||
currentLocale: 'en_US'
|
||||
options: ['@product_option_color']
|
||||
product_mug_disabled:
|
||||
code: 'MUG_DISABLED'
|
||||
channels: ['@channel_web']
|
||||
currentLocale: 'en_US'
|
||||
enabled: false
|
||||
|
||||
Sylius\Component\Core\Model\ProductTranslation:
|
||||
product_translation_mug:
|
||||
|
|
@ -37,6 +42,12 @@ Sylius\Component\Core\Model\ProductTranslation:
|
|||
name: 'Mug'
|
||||
description: '<paragraph(2)>'
|
||||
translatable: '@product_mug'
|
||||
product_translation_mug_disabled:
|
||||
slug: 'mug-disabled'
|
||||
locale: 'en_US'
|
||||
name: 'Mug Disabled'
|
||||
description: '<paragraph(2)>'
|
||||
translatable: '@product_mug_disabled'
|
||||
|
||||
Sylius\Component\Core\Model\ProductVariant:
|
||||
product_variant_mug_blue:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue