src/App/Subscriber/MembershipPaymentSubscriber.php line 37

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace App\Subscriber;
  3. use App\Entity\User;
  4. use App\Event\Recurring\MembershipPaymentCancelledEvent;
  5. use App\Event\Recurring\MembershipPaymentReceivedEvent;
  6. use App\Payment\Recurring\CreditsMembershipProcessor;
  7. use Psr\Log\LoggerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Validator\Exception\UnexpectedTypeException;
  10. class MembershipPaymentSubscriber implements EventSubscriberInterface
  11. {
  12.     private CreditsMembershipProcessor $creditsMembershipProcessor;
  13.     private LoggerInterface $paymentLogger;
  14.     public function __construct(CreditsMembershipProcessor $creditsMembershipProcessorLoggerInterface $paymentLogger)
  15.     {
  16.         $this->creditsMembershipProcessor $creditsMembershipProcessor;
  17.         $this->paymentLogger $paymentLogger;
  18.     }
  19.     public function onPaymentReceived(MembershipPaymentReceivedEvent $event): void
  20.     {
  21.         $this->paymentLogger->info(
  22.             sprintf(
  23.                 'Received a new payment event for user: %s transactionId: %s',
  24.                 $event->getUser()->getId(),
  25.                 $event->getTransactionId()
  26.             )
  27.         );
  28.     }
  29.     public function onPaymentCancelled(MembershipPaymentCancelledEvent $event): void
  30.     {
  31.         $user $event->getUser();
  32.         if (!$user instanceof User) {
  33.             throw new UnexpectedTypeException($userUser::class);
  34.         }
  35.         $this->paymentLogger->info(
  36.             sprintf(
  37.                 'Received a cancel payment event for user: %s transactionId: %s',
  38.                 $event->getUser()->getId(),
  39.                 $event->getTransactionId()
  40.             )
  41.         );
  42.         $this->creditsMembershipProcessor->cancelNow($user$event->getCreditsMembership());
  43.         $event->getCreditsMembership()->setTransactionRefunded($event->getTransactionId());
  44.     }
  45.     /**
  46.      * @return array<string, array<int|string, array<int|string, int|string>|int|string>|string>
  47.      */
  48.     public static function getSubscribedEvents(): array
  49.     {
  50.         return [
  51.             MembershipPaymentReceivedEvent::class => 'onPaymentReceived',
  52.             MembershipPaymentCancelledEvent::class => 'onPaymentCancelled',
  53.         ];
  54.     }
  55. }