<?php
declare(strict_types=1);
namespace BitBag\OpenMarketplace\Component\AddOn\EventListener;
use BitBag\OpenMarketplace\Component\AddOn\Entity\AddOnInterface;
use BitBag\OpenMarketplace\Component\AddOn\Provider\ProductProviderInterface;
use BitBag\OpenMarketplace\Component\AddOn\Synchronizer\ProductSynchronizerInterface;
use Doctrine\ORM\EntityManagerInterface;
use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
final class AddOnListener
{
public function __construct(
private ProductProviderInterface $provider,
private ProductSynchronizerInterface $synchronizer,
private EntityManagerInterface $entityManager,
) {
}
public function synchronizeProduct(ResourceControllerEvent $event): void
{
$addOn = $event->getSubject();
if (!$addOn instanceof AddOnInterface) {
return;
}
$product = $this->provider->provideProduct($addOn);
$productVariant = $this->provider->provideProductVariant($product, $addOn);
$this->synchronizer->synchronizeTranslations($addOn, $product);
$this->synchronizer->synchronizePricing($addOn, $product, $productVariant);
$addOn->setProduct($product);
$this->entityManager->persist($product);
$this->entityManager->flush();
}
}