src/Service/App/Merchant/Integrations/TeamBlue/Listener/ActivateSubscriptionListener.php line 70

Open in your IDE?
  1. <?php
  2. namespace App\Service\App\Merchant\Integrations\TeamBlue\Listener;
  3. use App\Background\Data\TeamBlueSyncSubscriptionData;
  4. use App\Core\BackgroundWork\Contract\IClient;
  5. use App\Core\MerchantSelector\Contract\IMerchantSelector;
  6. use App\Entity\Merchant\PlanSubscriptionItemEntity;
  7. use App\Repository\Merchant\Contract\IPlanSubscriptionRepository;
  8. use App\Service\App\Merchant\CustomFeature\Implementation\TeamBlueCustomFeature;
  9. use App\Service\App\Merchant\Subscription\Event\ActivateSubscriptionEvent;
  10. class ActivateSubscriptionListener
  11. {
  12.     /**
  13.      * Plan subscription repository
  14.      *
  15.      * @var IPlanSubscriptionRepository
  16.      */
  17.     private IPlanSubscriptionRepository $planSubscriptionRepository;
  18.     /**
  19.      * Team blue custom feature instance
  20.      *
  21.      * @var TeamBlueCustomFeature
  22.      */
  23.     private TeamBlueCustomFeature $teamBlueCustomFeature;
  24.     /**
  25.      * Background job client
  26.      *
  27.      * @var IClient
  28.      */
  29.     private IClient $backgroundClient;
  30.     /**
  31.      * Merchant selector
  32.      *
  33.      * @var IMerchantSelector
  34.      */
  35.     private IMerchantSelector $merchantSelector;
  36.     /**
  37.      * Constructor
  38.      *
  39.      * @param IPlanSubscriptionRepository $planSubscriptionRepository
  40.      * @param TeamBlueCustomFeature $teamBlueCustomFeature
  41.      * @param IClient $backgroundClient
  42.      * @param IMerchantSelector $merchantSelector
  43.      */
  44.     public function __construct(
  45.         IPlanSubscriptionRepository $planSubscriptionRepository,
  46.         TeamBlueCustomFeature $teamBlueCustomFeature,
  47.         IClient $backgroundClient,
  48.         IMerchantSelector $merchantSelector
  49.     )
  50.     {
  51.         $this->planSubscriptionRepository $planSubscriptionRepository;
  52.         $this->teamBlueCustomFeature $teamBlueCustomFeature;
  53.         $this->backgroundClient $backgroundClient;
  54.         $this->merchantSelector $merchantSelector;
  55.     }
  56.     /**
  57.      * On activate subscription action
  58.      *
  59.      * @param ActivateSubscriptionEvent $event
  60.      */
  61.     public function onAction(ActivateSubscriptionEvent $event): void
  62.     {
  63.         // if team blue custom feature is not enabled, return
  64.         if (!$this->teamBlueCustomFeature->isEnabled()) {
  65.             return;
  66.         }
  67.         // get subscription
  68.         $subscription $this->planSubscriptionRepository->getSubscription($event->getSubscriptionId());
  69.         // skip if subscription is not found or has payment
  70.         if (!$subscription || $subscription->getRelatedPayment()) {
  71.             return;
  72.         }
  73.         // skip if subscription contains non-free items
  74.         /** @var PlanSubscriptionItemEntity $item */
  75.         foreach ($subscription->getItems() as $item) {
  76.             if ($item->getPrice()->getPrice() > 0) {
  77.                 return;
  78.             }
  79.         }
  80.         $this->backgroundClient->runJob(
  81.             new TeamBlueSyncSubscriptionData($event->getSubscriptionId(), $this->merchantSelector->getMerchant())
  82.         );
  83.     }
  84. }