From a8d805899076665026d79743ca086b02182020df Mon Sep 17 00:00:00 2001 From: Mantas Marcinkevicius Date: Thu, 28 Jun 2018 11:50:59 +0300 Subject: [PATCH 1/5] fixed document collection getters and setters --- src/Document/ProductDocument.php | 27 ++++++++++++++------------- src/Document/TaxonDocument.php | 5 +++-- src/Document/VariantDocument.php | 11 ++++++----- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/Document/ProductDocument.php b/src/Document/ProductDocument.php index 3f09785..0526169 100644 --- a/src/Document/ProductDocument.php +++ b/src/Document/ProductDocument.php @@ -5,7 +5,8 @@ namespace Sylius\ElasticSearchPlugin\Document; use ONGR\ElasticsearchBundle\Annotation as ElasticSearch; -use ONGR\ElasticsearchBundle\Collection\Collection; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; /** * @ElasticSearch\Document(type="product") @@ -101,21 +102,21 @@ class ProductDocument protected $mainTaxon; /** - * @var Collection|TaxonDocument[] + * @var ArrayCollection|TaxonDocument[] * * @ElasticSearch\Embedded(class="Sylius\ElasticSearchPlugin\Document\TaxonDocument", multiple=true) */ protected $taxons; /** - * @var Collection + * @var ArrayCollection|AttributeDocument[] * * @ElasticSearch\Embedded(class="Sylius\ElasticSearchPlugin\Document\AttributeDocument", multiple=true) */ protected $attributes; /** - * @var Collection + * @var ArrayCollection|ImageDocument[] * * @ElasticSearch\Embedded(class="Sylius\ElasticSearchPlugin\Document\ImageDocument", multiple=true) */ @@ -134,7 +135,7 @@ class ProductDocument protected $createdAt; /** - * @var Collection + * @var ArrayCollection|VariantDocument[] * * @ElasticSearch\Embedded(class="Sylius\ElasticSearchPlugin\Document\VariantDocument", multiple=true) */ @@ -149,10 +150,10 @@ class ProductDocument public function __construct() { - $this->attributes = new Collection(); - $this->taxons = new Collection(); - $this->images = new Collection(); - $this->variants = new Collection(); + $this->attributes = new ArrayCollection(); + $this->taxons = new ArrayCollection(); + $this->images = new ArrayCollection(); + $this->variants = new ArrayCollection(); } /** @@ -342,13 +343,13 @@ public function getTaxons(): Collection /** * @param Collection|TaxonDocument[] $taxons */ - public function setTaxons($taxons): void + public function setTaxons(Collection $taxons): void { $this->taxons = $taxons; } /** - * @return Collection + * @return Collection|AttributeDocument[] */ public function getAttributes(): Collection { @@ -364,7 +365,7 @@ public function setAttributes(Collection $attributes): void } /** - * @return Collection + * @return Collection|ImageDocument[] */ public function getImages(): Collection { @@ -428,7 +429,7 @@ public function setSynchronisedAt(\DateTimeInterface $synchronisedAt): void } /** - * @return Collection + * @return Collection|VariantDocument[] */ public function getVariants(): Collection { diff --git a/src/Document/TaxonDocument.php b/src/Document/TaxonDocument.php index 3218d5c..d95a30e 100644 --- a/src/Document/TaxonDocument.php +++ b/src/Document/TaxonDocument.php @@ -5,7 +5,8 @@ namespace Sylius\ElasticSearchPlugin\Document; use ONGR\ElasticsearchBundle\Annotation as ElasticSearch; -use ONGR\ElasticsearchBundle\Collection\Collection; +use Doctrine\Common\Collections\Collection; +use Doctrine\Common\Collections\ArrayCollection; /** * @ElasticSearch\Nested() @@ -49,7 +50,7 @@ class TaxonDocument public function __construct() { - $this->images = new Collection(); + $this->images = new ArrayCollection(); } /** diff --git a/src/Document/VariantDocument.php b/src/Document/VariantDocument.php index 98c385c..160e481 100644 --- a/src/Document/VariantDocument.php +++ b/src/Document/VariantDocument.php @@ -5,7 +5,8 @@ namespace Sylius\ElasticSearchPlugin\Document; use ONGR\ElasticsearchBundle\Annotation as ElasticSearch; -use ONGR\ElasticsearchBundle\Collection\Collection; +use Doctrine\Common\Collections\Collection; +use Doctrine\Common\Collections\ArrayCollection; /** * @ElasticSearch\Nested @@ -62,7 +63,7 @@ class VariantDocument protected $isTracked; /** - * @var Collection + * @var Collection|OptionDocument[] * * @ElasticSearch\Embedded(class="Sylius\ElasticSearchPlugin\Document\OptionDocument", multiple=true) */ @@ -70,8 +71,8 @@ class VariantDocument public function __construct() { - $this->images = new Collection(); - $this->options = new Collection(); + $this->images = new ArrayCollection(); + $this->options = new ArrayCollection(); } /** @@ -192,7 +193,7 @@ public function setIsTracked(bool $isTracked): void } /** - * @return Collection + * @return Collection|OptionDocument[] */ public function getOptions(): Collection { From 20da7a3265ff0a73066c0ecea24205f36219e712 Mon Sep 17 00:00:00 2001 From: Mantas Marcinkevicius Date: Thu, 28 Jun 2018 11:51:18 +0300 Subject: [PATCH 2/5] fixed broken tests --- src/Factory/Document/ProductDocumentFactory.php | 14 +++++++------- src/Factory/Document/TaxonDocumentFactory.php | 4 ++-- src/Factory/Document/VariantDocumentFactory.php | 6 +++--- src/Factory/View/ProductListViewFactory.php | 2 +- tests/Factory/ProductDocumentFactoryTest.php | 12 ++++++------ 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/Factory/Document/ProductDocumentFactory.php b/src/Factory/Document/ProductDocumentFactory.php index 1de2e0d..13f2e09 100644 --- a/src/Factory/Document/ProductDocumentFactory.php +++ b/src/Factory/Document/ProductDocumentFactory.php @@ -4,8 +4,8 @@ namespace Sylius\ElasticSearchPlugin\Factory\Document; -use Doctrine\Common\Collections\Collection as DoctrineCollection; -use ONGR\ElasticsearchBundle\Collection\Collection; +use Doctrine\Common\Collections\Collection; +use Doctrine\Common\Collections\ArrayCollection; use Ramsey\Uuid\Uuid; use Sylius\Component\Core\Model\ChannelInterface; use Sylius\Component\Core\Model\ChannelPricingInterface; @@ -145,10 +145,10 @@ function (ProductVariantInterface $a, ProductVariantInterface $b) { $productDocument->setCreatedAt($product->getCreatedAt()); $productDocument->setSynchronisedAt(new \DateTime('now')); $productDocument->setAverageReviewRating($product->getAverageRating()); - $productDocument->setVariants(new Collection($variantDocuments)); - $productDocument->setImages(new Collection($imageDocuments)); - $productDocument->setTaxons(new Collection($taxonDocuments)); - $productDocument->setAttributes(new Collection($attributeDocuments)); + $productDocument->setVariants(new ArrayCollection($variantDocuments)); + $productDocument->setImages(new ArrayCollection($imageDocuments)); + $productDocument->setTaxons(new ArrayCollection($taxonDocuments)); + $productDocument->setAttributes(new ArrayCollection($attributeDocuments)); /** * Set smallest product variant price, used for search by price @@ -170,7 +170,7 @@ function (ProductVariantInterface $a, ProductVariantInterface $b) { } /** - * @param ProductVariantInterface[]|DoctrineCollection $variants + * @param ProductVariantInterface[]|Collection $variants * @param ChannelInterface $channel * * @return ChannelPricingInterface diff --git a/src/Factory/Document/TaxonDocumentFactory.php b/src/Factory/Document/TaxonDocumentFactory.php index 01c1f82..9e87527 100644 --- a/src/Factory/Document/TaxonDocumentFactory.php +++ b/src/Factory/Document/TaxonDocumentFactory.php @@ -4,7 +4,7 @@ namespace Sylius\ElasticSearchPlugin\Factory\Document; -use ONGR\ElasticsearchBundle\Collection\Collection; +use Doctrine\Common\Collections\ArrayCollection; use Sylius\Component\Core\Model\TaxonInterface; use Sylius\Component\Locale\Model\LocaleInterface; use Sylius\Component\Taxonomy\Model\TaxonTranslationInterface; @@ -54,7 +54,7 @@ public function create(TaxonInterface $taxon, LocaleInterface $localeCode, ?int foreach ($taxon->getImages() as $image) { $images[] = $this->imageDocumentFactory->create($image); } - $taxonDocument->setImages(new Collection($images)); + $taxonDocument->setImages(new ArrayCollection($images)); return $taxonDocument; } diff --git a/src/Factory/Document/VariantDocumentFactory.php b/src/Factory/Document/VariantDocumentFactory.php index a897d86..5aaf4e4 100644 --- a/src/Factory/Document/VariantDocumentFactory.php +++ b/src/Factory/Document/VariantDocumentFactory.php @@ -4,7 +4,7 @@ namespace Sylius\ElasticSearchPlugin\Factory\Document; -use ONGR\ElasticsearchBundle\Collection\Collection; +use Doctrine\Common\Collections\ArrayCollection; use Sylius\Component\Core\Model\ChannelInterface; use Sylius\Component\Core\Model\ChannelPricingInterface; use Sylius\Component\Core\Model\ProductVariantInterface; @@ -74,14 +74,14 @@ public function create( $variant->setPrice($price); $variant->setStock($productVariant->getOnHand() - $productVariant->getOnHold()); $variant->setIsTracked($productVariant->isTracked()); - $variant->setOptions(new Collection($options)); + $variant->setOptions(new ArrayCollection($options)); if ($productVariant->getImages()->count() > 0) { /** @var ImageDocument[] $images */ $images = []; foreach ($productVariant->getImages() as $image) { $images[] = $this->imageDocumentFactory->create($image); } - $variant->setImages(new Collection($images)); + $variant->setImages(new ArrayCollection($images)); } return $variant; diff --git a/src/Factory/View/ProductListViewFactory.php b/src/Factory/View/ProductListViewFactory.php index 487f2cc..8f64d03 100644 --- a/src/Factory/View/ProductListViewFactory.php +++ b/src/Factory/View/ProductListViewFactory.php @@ -4,7 +4,7 @@ namespace Sylius\ElasticSearchPlugin\Factory\View; -use ONGR\ElasticsearchBundle\Collection\Collection; +use Doctrine\Common\Collections\Collection; use ONGR\FilterManagerBundle\Search\SearchResponse; use Sylius\ElasticSearchPlugin\Controller\AttributeView; use Sylius\ElasticSearchPlugin\Controller\ImageView; diff --git a/tests/Factory/ProductDocumentFactoryTest.php b/tests/Factory/ProductDocumentFactoryTest.php index 28c93fa..02610df 100644 --- a/tests/Factory/ProductDocumentFactoryTest.php +++ b/tests/Factory/ProductDocumentFactoryTest.php @@ -4,7 +4,7 @@ namespace Tests\Sylius\ElasticSearchPlugin\Factory; -use ONGR\ElasticsearchBundle\Collection\Collection; +use Doctrine\Common\Collections\ArrayCollection; use Sylius\Bundle\ChannelBundle\Doctrine\ORM\ChannelRepository; use Sylius\Bundle\CoreBundle\Doctrine\ORM\ProductRepository; use Sylius\Component\Core\Model\Channel; @@ -106,7 +106,7 @@ public function it_creates_product_document_from_sylius_product_model() $this->assertEquals($product->getCode(), $product->getCode()); $this->assertEquals($product->getName(), $product->getName()); $this->assertEquals('en_GB', $product->getLocaleCode()); - $this->assertEquals(new Collection($productAttributes), $product->getAttributes()); + $this->assertEquals(new ArrayCollection($productAttributes), $product->getAttributes()); $this->assertEquals(1000, $product->getPrice()->getAmount()); $this->assertEquals('GBP', $product->getPrice()->getCurrency()); $this->assertEquals('en_GB', $product->getLocaleCode()); @@ -115,8 +115,8 @@ public function it_creates_product_document_from_sylius_product_model() $this->assertEquals('Logan Mug', $product->getName()); $this->assertEquals($createdAt, $product->getCreatedAt()); $this->assertEquals('Logan Mug', $product->getDescription()); - $this->assertEquals($taxon, $product->getMainTaxon()); - $this->assertEquals(new Collection($productTaxons), $product->getTaxons()); + $this->assertEquals($taxon->getCode(), $product->getMainTaxon()->getCode()); + $this->assertEquals(new ArrayCollection($productTaxons), $product->getTaxons()); $this->assertEquals(0.0, $product->getAverageReviewRating()); } @@ -170,7 +170,7 @@ public function it_creates_product_document_only_with_whitelisted_attributes() $this->assertEquals($product->getName(), $product->getName()); $this->assertEquals('en_GB', $product->getLocaleCode()); $this->assertEquals( - new Collection([$productAttribute]), + new ArrayCollection([$productAttribute]), $product->getAttributes() ); $this->assertEquals(1000, $product->getPrice()->getAmount()); @@ -182,7 +182,7 @@ public function it_creates_product_document_only_with_whitelisted_attributes() $this->assertEquals($createdAt, $product->getCreatedAt()); $this->assertEquals('Logan Mug', $product->getDescription()); $this->assertEquals($taxon, $product->getMainTaxon()); - $this->assertEquals(new Collection($productTaxons), $product->getTaxons()); + $this->assertEquals(new ArrayCollection($productTaxons), $product->getTaxons()); $this->assertEquals(0.0, $product->getAverageReviewRating()); } From c6640d67e86053258c2ca01e8060910d88cc6898 Mon Sep 17 00:00:00 2001 From: Mantas Marcinkevicius Date: Mon, 8 Oct 2018 16:38:44 +0300 Subject: [PATCH 3/5] updated dependencies --- composer.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 832727e..6911087 100644 --- a/composer.json +++ b/composer.json @@ -13,10 +13,9 @@ "require": { "php": "^7.1", "sylius/sylius": "^1.0", - "ongr/elasticsearch-dsl": "^5.0", - "ongr/elasticsearch-bundle": "^5.0", + "ongr/elasticsearch-bundle": "dev-6.0-dev", "simple-bus/symfony-bridge": "^4.1", - "ongr/filter-manager-bundle": "2.1.x-dev as v2.1.1", + "ongr/filter-manager-bundle": "dev-es-6.0", "ramsey/uuid": "^3.7" }, "require-dev": { From 27b37eb24ad0681a7e72fc636f3ee6774685d949 Mon Sep 17 00:00:00 2001 From: Mantas Marcinkevicius Date: Mon, 8 Oct 2018 17:14:53 +0300 Subject: [PATCH 4/5] updated document annotations --- src/Document/AttributeDocument.php | 2 +- src/Document/ImageDocument.php | 2 +- src/Document/OptionDocument.php | 2 +- src/Document/PriceDocument.php | 2 +- src/Document/TaxonDocument.php | 2 +- src/Document/VariantDocument.php | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Document/AttributeDocument.php b/src/Document/AttributeDocument.php index f875f3f..9d7390a 100644 --- a/src/Document/AttributeDocument.php +++ b/src/Document/AttributeDocument.php @@ -7,7 +7,7 @@ use ONGR\ElasticsearchBundle\Annotation as ElasticSearch; /** - * @ElasticSearch\Nested + * @ElasticSearch\NestedType */ class AttributeDocument { diff --git a/src/Document/ImageDocument.php b/src/Document/ImageDocument.php index f4f4d0f..3775314 100644 --- a/src/Document/ImageDocument.php +++ b/src/Document/ImageDocument.php @@ -7,7 +7,7 @@ use ONGR\ElasticsearchBundle\Annotation as ElasticSearch; /** - * @ElasticSearch\Object + * @ElasticSearch\ObjectType */ class ImageDocument { diff --git a/src/Document/OptionDocument.php b/src/Document/OptionDocument.php index 62ef3cb..4b125bf 100644 --- a/src/Document/OptionDocument.php +++ b/src/Document/OptionDocument.php @@ -7,7 +7,7 @@ use ONGR\ElasticsearchBundle\Annotation as ElasticSearch; /** - * @ElasticSearch\Nested + * @ElasticSearch\NestedType */ class OptionDocument { diff --git a/src/Document/PriceDocument.php b/src/Document/PriceDocument.php index d834263..277867b 100644 --- a/src/Document/PriceDocument.php +++ b/src/Document/PriceDocument.php @@ -7,7 +7,7 @@ use ONGR\ElasticsearchBundle\Annotation as ElasticSearch; /** - * @ElasticSearch\Object + * @ElasticSearch\ObjectType */ class PriceDocument { diff --git a/src/Document/TaxonDocument.php b/src/Document/TaxonDocument.php index d95a30e..78f7352 100644 --- a/src/Document/TaxonDocument.php +++ b/src/Document/TaxonDocument.php @@ -9,7 +9,7 @@ use Doctrine\Common\Collections\ArrayCollection; /** - * @ElasticSearch\Nested() + * @ElasticSearch\NestedType */ class TaxonDocument { diff --git a/src/Document/VariantDocument.php b/src/Document/VariantDocument.php index 160e481..81a123b 100644 --- a/src/Document/VariantDocument.php +++ b/src/Document/VariantDocument.php @@ -9,7 +9,7 @@ use Doctrine\Common\Collections\ArrayCollection; /** - * @ElasticSearch\Nested + * @ElasticSearch\NestedType */ class VariantDocument { From 8fd0a8db4eadc6ccbe85fb10341a81a153f68201 Mon Sep 17 00:00:00 2001 From: Mantas Marcinkevicius Date: Fri, 9 Nov 2018 23:22:38 +0200 Subject: [PATCH 5/5] made documents truly extendable by introducing interfaces --- src/Command/UpdateProductIndexCommand.php | 16 +- src/Document/AttributeDocument.php | 2 +- src/Document/AttributeDocumentInterface.php | 38 ++++ src/Document/ImageDocument.php | 2 +- src/Document/ImageDocumentInterface.php | 28 +++ src/Document/OptionDocument.php | 2 +- src/Document/OptionDocumentInterface.php | 38 ++++ src/Document/PriceDocument.php | 4 +- src/Document/PriceDocumentInterface.php | 38 ++++ src/Document/ProductDocument.php | 28 +-- src/Document/ProductDocumentInterface.php | 190 ++++++++++++++++++ src/Document/TaxonDocument.php | 2 +- src/Document/TaxonDocumentInterface.php | 60 ++++++ src/Document/VariantDocument.php | 12 +- src/Document/VariantDocumentInterface.php | 95 +++++++++ .../Document/AttributeDocumentFactory.php | 4 +- src/Factory/Document/ImageDocumentFactory.php | 6 +- .../ImageDocumentFactoryInterface.php | 4 +- .../Document/OptionDocumentFactory.php | 6 +- .../OptionDocumentFactoryInterface.php | 4 +- src/Factory/Document/PriceDocumentFactory.php | 6 +- .../PriceDocumentFactoryInterface.php | 4 +- .../Document/ProductDocumentFactory.php | 24 +-- .../ProductDocumentFactoryInterface.php | 6 +- src/Factory/Document/TaxonDocumentFactory.php | 12 +- .../TaxonDocumentFactoryInterface.php | 3 +- .../Document/VariantDocumentFactory.php | 10 +- .../VariantDocumentFactoryInterface.php | 4 +- src/Factory/View/ProductListViewFactory.php | 30 +-- src/Projection/ProductProjector.php | 10 +- src/Resources/config/services.xml | 1 + src/Resources/config/services/command.xml | 1 + 32 files changed, 592 insertions(+), 98 deletions(-) create mode 100644 src/Document/AttributeDocumentInterface.php create mode 100644 src/Document/ImageDocumentInterface.php create mode 100644 src/Document/OptionDocumentInterface.php create mode 100644 src/Document/PriceDocumentInterface.php create mode 100644 src/Document/ProductDocumentInterface.php create mode 100644 src/Document/TaxonDocumentInterface.php create mode 100644 src/Document/VariantDocumentInterface.php diff --git a/src/Command/UpdateProductIndexCommand.php b/src/Command/UpdateProductIndexCommand.php index 05308be..f16142f 100644 --- a/src/Command/UpdateProductIndexCommand.php +++ b/src/Command/UpdateProductIndexCommand.php @@ -12,7 +12,7 @@ use Sylius\Component\Core\Model\ProductInterface; use Sylius\Component\Core\Repository\ProductRepositoryInterface; use Sylius\Component\Locale\Model\LocaleInterface; -use Sylius\ElasticSearchPlugin\Document\ProductDocument; +use Sylius\ElasticSearchPlugin\Document\ProductDocumentInterface; use Sylius\ElasticSearchPlugin\Factory\Document\ProductDocumentFactoryInterface; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; @@ -42,18 +42,20 @@ final class UpdateProductIndexCommand extends Command private $productDocumentFactory; /** - * @param ProductRepositoryInterface $productRepository - * @param Manager $elasticsearchManager + * @param ProductRepositoryInterface $productRepository + * @param Manager $elasticsearchManager * @param ProductDocumentFactoryInterface $productDocumentFactory + * @param string $productDocumentClass */ public function __construct( ProductRepositoryInterface $productRepository, Manager $elasticsearchManager, - ProductDocumentFactoryInterface $productDocumentFactory + ProductDocumentFactoryInterface $productDocumentFactory, + string $productDocumentClass ) { $this->productRepository = $productRepository; $this->elasticsearchManager = $elasticsearchManager; - $this->productDocumentRepository = $elasticsearchManager->getRepository(ProductDocument::class); + $this->productDocumentRepository = $elasticsearchManager->getRepository($productDocumentClass); $this->productDocumentFactory = $productDocumentFactory; parent::__construct('sylius:elastic-search:update-product-index'); @@ -81,7 +83,7 @@ protected function execute(InputInterface $input, OutputInterface $output): void $search->setScroll('10m'); $search->addSort(new FieldSort('synchronised_at', 'asc')); - /** @var DocumentIterator|ProductDocument[] $productDocuments */ + /** @var DocumentIterator|ProductDocumentInterface[] $productDocuments */ $productDocuments = $this->productDocumentRepository->findDocuments($search); foreach ($productDocuments as $productDocument) { @@ -143,7 +145,7 @@ private function scheduleCreatingNewProductDocuments(string $productCode): void private function scheduleRemovingOldProductDocuments(string $productCode): void { - /** @var DocumentIterator|ProductDocument[] $currentProductDocuments */ + /** @var DocumentIterator|ProductDocumentInterface[] $currentProductDocuments */ $currentProductDocuments = $this->productDocumentRepository->findBy(['code' => $productCode]); foreach ($currentProductDocuments as $sameCodeProductDocument) { diff --git a/src/Document/AttributeDocument.php b/src/Document/AttributeDocument.php index 9d7390a..95d5d1d 100644 --- a/src/Document/AttributeDocument.php +++ b/src/Document/AttributeDocument.php @@ -9,7 +9,7 @@ /** * @ElasticSearch\NestedType */ -class AttributeDocument +class AttributeDocument implements AttributeDocumentInterface { /** * @var string diff --git a/src/Document/AttributeDocumentInterface.php b/src/Document/AttributeDocumentInterface.php new file mode 100644 index 0000000..b881f13 --- /dev/null +++ b/src/Document/AttributeDocumentInterface.php @@ -0,0 +1,38 @@ +amount = $amount; } diff --git a/src/Document/PriceDocumentInterface.php b/src/Document/PriceDocumentInterface.php new file mode 100644 index 0000000..160cb35 --- /dev/null +++ b/src/Document/PriceDocumentInterface.php @@ -0,0 +1,38 @@ +price; } /** - * @param PriceDocument $price + * @param PriceDocumentInterface $price */ - public function setPrice(PriceDocument $price): void + public function setPrice(PriceDocumentInterface $price): void { $this->price = $price; } /** - * @return TaxonDocument + * @return TaxonDocumentInterface */ - public function getMainTaxon(): ?TaxonDocument + public function getMainTaxon(): ?TaxonDocumentInterface { return $this->mainTaxon; } /** - * @param TaxonDocument $mainTaxon + * @param TaxonDocumentInterface $mainTaxon */ - public function setMainTaxon(TaxonDocument $mainTaxon): void + public function setMainTaxon(TaxonDocumentInterface $mainTaxon): void { $this->mainTaxon = $mainTaxon; } /** - * @return Collection|TaxonDocument[] + * @return Collection|TaxonDocumentInterface[] */ public function getTaxons(): Collection { @@ -341,7 +341,7 @@ public function getTaxons(): Collection } /** - * @param Collection|TaxonDocument[] $taxons + * @param Collection|TaxonDocumentInterface[] $taxons */ public function setTaxons(Collection $taxons): void { @@ -349,7 +349,7 @@ public function setTaxons(Collection $taxons): void } /** - * @return Collection|AttributeDocument[] + * @return Collection|AttributeDocumentInterface[] */ public function getAttributes(): Collection { @@ -365,7 +365,7 @@ public function setAttributes(Collection $attributes): void } /** - * @return Collection|ImageDocument[] + * @return Collection|ImageDocumentInterface[] */ public function getImages(): Collection { @@ -429,7 +429,7 @@ public function setSynchronisedAt(\DateTimeInterface $synchronisedAt): void } /** - * @return Collection|VariantDocument[] + * @return Collection|VariantDocumentInterface[] */ public function getVariants(): Collection { diff --git a/src/Document/ProductDocumentInterface.php b/src/Document/ProductDocumentInterface.php new file mode 100644 index 0000000..5b9a44a --- /dev/null +++ b/src/Document/ProductDocumentInterface.php @@ -0,0 +1,190 @@ +price; } /** - * @param PriceDocument $price + * @param PriceDocumentInterface $price */ - public function setPrice(PriceDocument $price): void + public function setPrice(PriceDocumentInterface $price): void { $this->price = $price; } diff --git a/src/Document/VariantDocumentInterface.php b/src/Document/VariantDocumentInterface.php new file mode 100644 index 0000000..2ce08a0 --- /dev/null +++ b/src/Document/VariantDocumentInterface.php @@ -0,0 +1,95 @@ +attributeDocumentClass(); $productAttribute->setCode($productAttributeValue->getCode()); $productAttribute->setValue($data); diff --git a/src/Factory/Document/ImageDocumentFactory.php b/src/Factory/Document/ImageDocumentFactory.php index e352f7f..783c611 100644 --- a/src/Factory/Document/ImageDocumentFactory.php +++ b/src/Factory/Document/ImageDocumentFactory.php @@ -5,7 +5,7 @@ namespace Sylius\ElasticSearchPlugin\Factory\Document; use Sylius\Component\Core\Model\ImageInterface; -use Sylius\ElasticSearchPlugin\Document\ImageDocument; +use Sylius\ElasticSearchPlugin\Document\ImageDocumentInterface; final class ImageDocumentFactory implements ImageDocumentFactoryInterface { @@ -17,9 +17,9 @@ public function __construct(string $imageDocumentClass) $this->imageDocumentClass = $imageDocumentClass; } - public function create(ImageInterface $image): ImageDocument + public function create(ImageInterface $image): ImageDocumentInterface { - /** @var ImageDocument $imageDocument */ + /** @var ImageDocumentInterface $imageDocument */ $imageDocument = new $this->imageDocumentClass(); $imageDocument->setCode($image->getType()); $imageDocument->setPath($image->getPath()); diff --git a/src/Factory/Document/ImageDocumentFactoryInterface.php b/src/Factory/Document/ImageDocumentFactoryInterface.php index dd0c165..938222f 100644 --- a/src/Factory/Document/ImageDocumentFactoryInterface.php +++ b/src/Factory/Document/ImageDocumentFactoryInterface.php @@ -5,9 +5,9 @@ namespace Sylius\ElasticSearchPlugin\Factory\Document; use Sylius\Component\Core\Model\ImageInterface; -use Sylius\ElasticSearchPlugin\Document\ImageDocument; +use Sylius\ElasticSearchPlugin\Document\ImageDocumentInterface; interface ImageDocumentFactoryInterface { - public function create(ImageInterface $image): ImageDocument; + public function create(ImageInterface $image): ImageDocumentInterface; } diff --git a/src/Factory/Document/OptionDocumentFactory.php b/src/Factory/Document/OptionDocumentFactory.php index 508d756..3a815aa 100644 --- a/src/Factory/Document/OptionDocumentFactory.php +++ b/src/Factory/Document/OptionDocumentFactory.php @@ -8,7 +8,7 @@ use Sylius\Component\Product\Model\ProductOptionTranslationInterface; use Sylius\Component\Product\Model\ProductOptionValueInterface; use Sylius\Component\Product\Model\ProductOptionValueTranslationInterface; -use Sylius\ElasticSearchPlugin\Document\OptionDocument; +use Sylius\ElasticSearchPlugin\Document\OptionDocumentInterface; final class OptionDocumentFactory implements OptionDocumentFactoryInterface { @@ -23,14 +23,14 @@ public function __construct(string $optionDocumentClass) public function create( ProductOptionValueInterface $optionValue, LocaleInterface $locale - ): OptionDocument { + ): OptionDocumentInterface { /** @var ProductOptionValueTranslationInterface $optionValueTranslation */ $optionValueTranslation = $optionValue->getTranslation($locale->getCode()); /** @var ProductOptionTranslationInterface $productOptionTranslation */ $productOptionTranslation = $optionValue->getOption()->getTranslation($locale->getCode()); - /** @var OptionDocument $option */ + /** @var OptionDocumentInterface $option */ $option = new $this->optionDocumentClass(); $option->setCode($optionValue->getOptionCode()); $option->setName($productOptionTranslation->getName()); diff --git a/src/Factory/Document/OptionDocumentFactoryInterface.php b/src/Factory/Document/OptionDocumentFactoryInterface.php index bb94f44..4b2a761 100644 --- a/src/Factory/Document/OptionDocumentFactoryInterface.php +++ b/src/Factory/Document/OptionDocumentFactoryInterface.php @@ -6,12 +6,12 @@ use Sylius\Component\Locale\Model\LocaleInterface; use Sylius\Component\Product\Model\ProductOptionValueInterface; -use Sylius\ElasticSearchPlugin\Document\OptionDocument; +use Sylius\ElasticSearchPlugin\Document\OptionDocumentInterface; interface OptionDocumentFactoryInterface { public function create( ProductOptionValueInterface $optionValue, LocaleInterface $locale - ): OptionDocument; + ): OptionDocumentInterface; } diff --git a/src/Factory/Document/PriceDocumentFactory.php b/src/Factory/Document/PriceDocumentFactory.php index f8e1e75..9152f52 100644 --- a/src/Factory/Document/PriceDocumentFactory.php +++ b/src/Factory/Document/PriceDocumentFactory.php @@ -6,7 +6,7 @@ use Sylius\Component\Core\Model\ChannelPricingInterface; use Sylius\Component\Currency\Model\CurrencyInterface; -use Sylius\ElasticSearchPlugin\Document\PriceDocument; +use Sylius\ElasticSearchPlugin\Document\PriceDocumentInterface; final class PriceDocumentFactory implements PriceDocumentFactoryInterface { @@ -23,8 +23,8 @@ public function __construct(string $priceDocumentClass) public function create( ChannelPricingInterface $channelPricing, CurrencyInterface $currency - ): PriceDocument { - /** @var PriceDocument $price */ + ): PriceDocumentInterface { + /** @var PriceDocumentInterface $price */ $price = new $this->priceDocumentClass(); $originalAmount = $channelPricing->getOriginalPrice(); diff --git a/src/Factory/Document/PriceDocumentFactoryInterface.php b/src/Factory/Document/PriceDocumentFactoryInterface.php index a9afd30..e2e5630 100644 --- a/src/Factory/Document/PriceDocumentFactoryInterface.php +++ b/src/Factory/Document/PriceDocumentFactoryInterface.php @@ -6,12 +6,12 @@ use Sylius\Component\Core\Model\ChannelPricingInterface; use Sylius\Component\Currency\Model\CurrencyInterface; -use Sylius\ElasticSearchPlugin\Document\PriceDocument; +use Sylius\ElasticSearchPlugin\Document\PriceDocumentInterface; interface PriceDocumentFactoryInterface { public function create( ChannelPricingInterface $channelPricing, CurrencyInterface $currency - ): PriceDocument; + ): PriceDocumentInterface; } diff --git a/src/Factory/Document/ProductDocumentFactory.php b/src/Factory/Document/ProductDocumentFactory.php index 13f2e09..3add393 100644 --- a/src/Factory/Document/ProductDocumentFactory.php +++ b/src/Factory/Document/ProductDocumentFactory.php @@ -14,9 +14,9 @@ use Sylius\Component\Core\Model\ProductVariantInterface; use Sylius\Component\Locale\Model\LocaleInterface; use Sylius\Component\Resource\Model\TranslationInterface; -use Sylius\ElasticSearchPlugin\Document\ImageDocument; -use Sylius\ElasticSearchPlugin\Document\ProductDocument; -use Sylius\ElasticSearchPlugin\Document\TaxonDocument; +use Sylius\ElasticSearchPlugin\Document\ImageDocumentInterface; +use Sylius\ElasticSearchPlugin\Document\ProductDocumentInterface; +use Sylius\ElasticSearchPlugin\Document\TaxonDocumentInterface; use Zend\Stdlib\ArrayObject; final class ProductDocumentFactory implements ProductDocumentFactoryInterface @@ -60,7 +60,7 @@ public function __construct( VariantDocumentFactoryInterface $variantDocumentFactory, array $attributeWhitelist ) { - $this->assertClassExtends($productDocumentClass, ProductDocument::class); + $this->assertClassImplements($productDocumentClass, ProductDocumentInterface::class); $this->productDocumentClass = $productDocumentClass; $this->attributeDocumentFactory = $attributeDocumentFactory; @@ -78,13 +78,13 @@ public function __construct( * @param LocaleInterface $locale * @param ChannelInterface $channel * - * @return ProductDocument + * @return ProductDocumentInterface */ public function create( ProductInterface $product, LocaleInterface $locale, ChannelInterface $channel - ): ProductDocument { + ): ProductDocumentInterface { /** @var ProductVariantInterface[] $productVariants */ $productVariants = $product->getVariants()->filter(function (ProductVariantInterface $productVariant) use ($channel): bool { return $productVariant->hasChannelPricingForChannel($channel); @@ -104,7 +104,7 @@ function (ProductVariantInterface $a, ProductVariantInterface $b) { $variantDocuments[] = $this->variantDocumentFactory->create($variant, $channel, $locale); } - /** @var ImageDocument[] $imageDocuments */ + /** @var ImageDocumentInterface[] $imageDocuments */ $imageDocuments = []; foreach ($product->getImages() as $productImage) { foreach ($productVariants as $variant) { @@ -116,7 +116,7 @@ function (ProductVariantInterface $a, ProductVariantInterface $b) { $imageDocuments[] = $this->imageDocumentFactory->create($productImage); } - /** @var TaxonDocument[] $taxonDocuments */ + /** @var TaxonDocumentInterface[] $taxonDocuments */ $taxonDocuments = []; foreach ($product->getProductTaxons() as $syliusProductTaxon) { $taxonDocuments[] = $this->taxonDocumentFactory->create( @@ -131,7 +131,7 @@ function (ProductVariantInterface $a, ProductVariantInterface $b) { $attributeDocuments = $this->getAttributeDocuments($product, $locale, $channel); - /** @var ProductDocument $productDocument */ + /** @var ProductDocumentInterface $productDocument */ $productDocument = new $this->productDocumentClass(); $productDocument->setUuid(Uuid::uuid4()->toString()); $productDocument->setId($product->getId()); @@ -200,10 +200,10 @@ private function getMinimalPriceFromVariants($variants, ChannelInterface $channe * * @throws \InvalidArgumentException */ - private function assertClassExtends(string $class, string $parentClass) + private function assertClassImplements(string $class, string $parentClass) { - if ($class !== $parentClass && !in_array($parentClass, class_parents($class), true)) { - throw new \InvalidArgumentException(sprintf('Class %s MUST extend class %s!', $class, $parentClass)); + if ($class instanceof $parentClass) { + throw new \InvalidArgumentException(sprintf('Class %s MUST implement class %s!', $class, $parentClass)); } } diff --git a/src/Factory/Document/ProductDocumentFactoryInterface.php b/src/Factory/Document/ProductDocumentFactoryInterface.php index dd0dce5..d93da8e 100644 --- a/src/Factory/Document/ProductDocumentFactoryInterface.php +++ b/src/Factory/Document/ProductDocumentFactoryInterface.php @@ -7,7 +7,7 @@ use Sylius\Component\Core\Model\ChannelInterface; use Sylius\Component\Core\Model\ProductInterface; use Sylius\Component\Locale\Model\LocaleInterface; -use Sylius\ElasticSearchPlugin\Document\ProductDocument; +use Sylius\ElasticSearchPlugin\Document\ProductDocumentInterface; interface ProductDocumentFactoryInterface { @@ -16,11 +16,11 @@ interface ProductDocumentFactoryInterface * @param LocaleInterface $locale * @param ChannelInterface $channel * - * @return ProductDocument + * @return ProductDocumentInterface */ public function create( ProductInterface $product, LocaleInterface $locale, ChannelInterface $channel - ): ProductDocument; + ): ProductDocumentInterface; } diff --git a/src/Factory/Document/TaxonDocumentFactory.php b/src/Factory/Document/TaxonDocumentFactory.php index 9e87527..657f3cb 100644 --- a/src/Factory/Document/TaxonDocumentFactory.php +++ b/src/Factory/Document/TaxonDocumentFactory.php @@ -8,8 +8,8 @@ use Sylius\Component\Core\Model\TaxonInterface; use Sylius\Component\Locale\Model\LocaleInterface; use Sylius\Component\Taxonomy\Model\TaxonTranslationInterface; -use Sylius\ElasticSearchPlugin\Document\ImageDocument; -use Sylius\ElasticSearchPlugin\Document\TaxonDocument; +use Sylius\ElasticSearchPlugin\Document\ImageDocumentInterface; +use Sylius\ElasticSearchPlugin\Document\TaxonDocumentInterface; final class TaxonDocumentFactory implements TaxonDocumentFactoryInterface { @@ -30,14 +30,14 @@ public function __construct(string $taxonDocumentClass, ImageDocumentFactoryInte * @param LocaleInterface $localeCode * @param int|null $position Override the position in the Taxon model by passing your own * - * @return TaxonDocument + * @return TaxonDocumentInterface */ - public function create(TaxonInterface $taxon, LocaleInterface $localeCode, ?int $position = null): TaxonDocument + public function create(TaxonInterface $taxon, LocaleInterface $localeCode, ?int $position = null): TaxonDocumentInterface { /** @var TaxonTranslationInterface $taxonTranslation */ $taxonTranslation = $taxon->getTranslation($localeCode->getCode()); - /** @var TaxonDocument $taxonDocument */ + /** @var TaxonDocumentInterface $taxonDocument */ $taxonDocument = new $this->taxonDocumentClass(); $taxonDocument->setCode($taxon->getCode()); $taxonDocument->setSlug($taxonTranslation->getSlug()); @@ -49,7 +49,7 @@ public function create(TaxonInterface $taxon, LocaleInterface $localeCode, ?int $taxonDocument->setDescription($taxonTranslation->getDescription()); - /** @var ImageDocument[] $images */ + /** @var ImageDocumentInterface[] $images */ $images = []; foreach ($taxon->getImages() as $image) { $images[] = $this->imageDocumentFactory->create($image); diff --git a/src/Factory/Document/TaxonDocumentFactoryInterface.php b/src/Factory/Document/TaxonDocumentFactoryInterface.php index 6227b79..30e52ce 100644 --- a/src/Factory/Document/TaxonDocumentFactoryInterface.php +++ b/src/Factory/Document/TaxonDocumentFactoryInterface.php @@ -7,8 +7,9 @@ use Sylius\Component\Core\Model\TaxonInterface; use Sylius\Component\Locale\Model\LocaleInterface; use Sylius\ElasticSearchPlugin\Document\TaxonDocument; +use Sylius\ElasticSearchPlugin\Document\TaxonDocumentInterface; interface TaxonDocumentFactoryInterface { - public function create(TaxonInterface $taxon, LocaleInterface $localeCode, ?int $position = null): TaxonDocument; + public function create(TaxonInterface $taxon, LocaleInterface $localeCode, ?int $position = null): TaxonDocumentInterface; } diff --git a/src/Factory/Document/VariantDocumentFactory.php b/src/Factory/Document/VariantDocumentFactory.php index 5aaf4e4..970868f 100644 --- a/src/Factory/Document/VariantDocumentFactory.php +++ b/src/Factory/Document/VariantDocumentFactory.php @@ -10,8 +10,8 @@ use Sylius\Component\Core\Model\ProductVariantInterface; use Sylius\Component\Locale\Model\LocaleInterface; use Sylius\Component\Product\Model\ProductVariantTranslationInterface; -use Sylius\ElasticSearchPlugin\Document\ImageDocument; -use Sylius\ElasticSearchPlugin\Document\VariantDocument; +use Sylius\ElasticSearchPlugin\Document\ImageDocumentInterface; +use Sylius\ElasticSearchPlugin\Document\VariantDocumentInterface; final class VariantDocumentFactory implements VariantDocumentFactoryInterface { @@ -43,7 +43,7 @@ public function create( ProductVariantInterface $productVariant, ChannelInterface $channel, LocaleInterface $locale - ): VariantDocument { + ): VariantDocumentInterface { $options = []; foreach ($productVariant->getOptionValues() as $optionValue) { $options[] = $this->optionDocumentFactory->create($optionValue, $locale); @@ -60,7 +60,7 @@ public function create( /** @var ProductVariantTranslationInterface $productVariantTranslation */ $productVariantTranslation = $productVariant->getTranslation($locale->getCode()); - /** @var VariantDocument $variant */ + /** @var VariantDocumentInterface $variant */ $variant = new $this->variantDocumentClass(); $variant->setId($productVariant->getId()); $variant->setCode($productVariant->getCode()); @@ -76,7 +76,7 @@ public function create( $variant->setIsTracked($productVariant->isTracked()); $variant->setOptions(new ArrayCollection($options)); if ($productVariant->getImages()->count() > 0) { - /** @var ImageDocument[] $images */ + /** @var ImageDocumentInterface[] $images */ $images = []; foreach ($productVariant->getImages() as $image) { $images[] = $this->imageDocumentFactory->create($image); diff --git a/src/Factory/Document/VariantDocumentFactoryInterface.php b/src/Factory/Document/VariantDocumentFactoryInterface.php index c3254f2..079f2bd 100644 --- a/src/Factory/Document/VariantDocumentFactoryInterface.php +++ b/src/Factory/Document/VariantDocumentFactoryInterface.php @@ -7,7 +7,7 @@ use Sylius\Component\Core\Model\ChannelInterface; use Sylius\Component\Core\Model\ProductVariantInterface; use Sylius\Component\Locale\Model\LocaleInterface; -use Sylius\ElasticSearchPlugin\Document\VariantDocument; +use Sylius\ElasticSearchPlugin\Document\VariantDocumentInterface; interface VariantDocumentFactoryInterface { @@ -15,5 +15,5 @@ public function create( ProductVariantInterface $productVariant, ChannelInterface $channel, LocaleInterface $locale - ): VariantDocument; + ): VariantDocumentInterface; } diff --git a/src/Factory/View/ProductListViewFactory.php b/src/Factory/View/ProductListViewFactory.php index 8f64d03..c249cd7 100644 --- a/src/Factory/View/ProductListViewFactory.php +++ b/src/Factory/View/ProductListViewFactory.php @@ -14,11 +14,11 @@ use Sylius\ElasticSearchPlugin\Controller\TaxonView; use Sylius\ElasticSearchPlugin\Controller\VariantView; use Sylius\ElasticSearchPlugin\Document\AttributeDocument; -use Sylius\ElasticSearchPlugin\Document\ImageDocument; -use Sylius\ElasticSearchPlugin\Document\PriceDocument; -use Sylius\ElasticSearchPlugin\Document\ProductDocument; -use Sylius\ElasticSearchPlugin\Document\TaxonDocument; -use Sylius\ElasticSearchPlugin\Document\VariantDocument; +use Sylius\ElasticSearchPlugin\Document\ImageDocumentInterface; +use Sylius\ElasticSearchPlugin\Document\PriceDocumentInterface; +use Sylius\ElasticSearchPlugin\Document\ProductDocumentInterface; +use Sylius\ElasticSearchPlugin\Document\TaxonDocumentInterface; +use Sylius\ElasticSearchPlugin\Document\VariantDocumentInterface; final class ProductListViewFactory implements ProductListViewFactoryInterface { @@ -79,7 +79,7 @@ public function createFromSearchResponse(SearchResponse $response): ProductListV $productListView->pages = $pager['num_pages']; $productListView->limit = $pager['limit']; - /** @var ProductDocument $product */ + /** @var ProductDocumentInterface $product */ foreach ($result as $product) { $productListView->items[] = $this->getProductView($product); } @@ -88,7 +88,7 @@ public function createFromSearchResponse(SearchResponse $response): ProductListV } /** - * @param Collection|ImageDocument[] $images + * @param Collection|ImageDocumentInterface[] $images * * @return ImageView[] */ @@ -108,12 +108,12 @@ private function getImageViews(Collection $images): array } /** - * @param Collection|TaxonDocument[] $taxons - * @param TaxonDocument|null $mainTaxonDocument + * @param Collection|TaxonDocumentInterface[] $taxons + * @param TaxonDocumentInterface|null $mainTaxonDocument * * @return TaxonView */ - private function getTaxonView(Collection $taxons, ?TaxonDocument $mainTaxonDocument): TaxonView + private function getTaxonView(Collection $taxons, ?TaxonDocumentInterface $mainTaxonDocument): TaxonView { /** @var TaxonView $taxonView */ $taxonView = new $this->taxonViewClass(); @@ -148,11 +148,11 @@ private function getAttributeViews(Collection $attributes): array } /** - * @param PriceDocument $price + * @param PriceDocumentInterface $price * * @return PriceView */ - private function getPriceView(PriceDocument $price): PriceView + private function getPriceView(PriceDocumentInterface $price): PriceView { /** @var PriceView $priceView */ $priceView = new $this->priceViewClass(); @@ -164,7 +164,7 @@ private function getPriceView(PriceDocument $price): PriceView } /** - * @param VariantDocument[]|Collection $variants + * @param VariantDocumentInterface[]|Collection $variants * * @return array */ @@ -191,11 +191,11 @@ private function getVariantViews(Collection $variants): array } /** - * @param ProductDocument $product + * @param ProductDocumentInterface $product * * @return ProductView */ - private function getProductView(ProductDocument $product): ProductView + private function getProductView(ProductDocumentInterface $product): ProductView { /** @var ProductView $productView */ $productView = new $this->productViewClass(); diff --git a/src/Projection/ProductProjector.php b/src/Projection/ProductProjector.php index 4f70578..07c1700 100644 --- a/src/Projection/ProductProjector.php +++ b/src/Projection/ProductProjector.php @@ -10,7 +10,7 @@ use Sylius\Component\Core\Model\ChannelInterface; use Sylius\Component\Core\Model\ProductInterface; use Sylius\Component\Locale\Model\LocaleInterface; -use Sylius\ElasticSearchPlugin\Document\ProductDocument; +use Sylius\ElasticSearchPlugin\Document\ProductDocumentInterface; use Sylius\ElasticSearchPlugin\Event\ProductCreated; use Sylius\ElasticSearchPlugin\Event\ProductDeleted; use Sylius\ElasticSearchPlugin\Event\ProductUpdated; @@ -36,13 +36,15 @@ final class ProductProjector /** * @param Manager $elasticsearchManager * @param ProductDocumentFactoryInterface $productDocumentFactory + * @param string $productDocumentClass */ public function __construct( Manager $elasticsearchManager, - ProductDocumentFactoryInterface $productDocumentFactory + ProductDocumentFactoryInterface $productDocumentFactory, + string $productDocumentClass ) { $this->elasticsearchManager = $elasticsearchManager; - $this->productDocumentRepository = $elasticsearchManager->getRepository(ProductDocument::class); + $this->productDocumentRepository = $elasticsearchManager->getRepository($productDocumentClass); $this->productDocumentFactory = $productDocumentFactory; } @@ -107,7 +109,7 @@ private function scheduleCreatingNewProductDocuments(ProductInterface $product): private function scheduleRemovingOldProductDocuments(ProductInterface $product): void { - /** @var DocumentIterator|ProductDocument[] $currentProductDocuments */ + /** @var DocumentIterator|ProductDocumentInterface[] $currentProductDocuments */ $currentProductDocuments = $this->productDocumentRepository->findBy(['code' => $product->getCode()]); foreach ($currentProductDocuments as $sameCodeProductDocument) { diff --git a/src/Resources/config/services.xml b/src/Resources/config/services.xml index ec4ce9a..d4919b1 100644 --- a/src/Resources/config/services.xml +++ b/src/Resources/config/services.xml @@ -18,6 +18,7 @@ + %sylius_elastic_search.document.product.class% diff --git a/src/Resources/config/services/command.xml b/src/Resources/config/services/command.xml index fcbe262..7e5e4fd 100644 --- a/src/Resources/config/services/command.xml +++ b/src/Resources/config/services/command.xml @@ -13,6 +13,7 @@ + %sylius_elastic_search.document.product.class%