src/FMT/Application/Listener/DwollaEventListener.php line 41

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace FMT\Application\Listener;
  4. use DateTime;
  5. use FMT\Data\Entity\DwollaEvent;
  6. use FMT\Domain\Repository\BookstoreTransferRepositoryInterface;
  7. use FMT\Domain\Repository\DwollaEventRepositoryInterface;
  8. use FMT\Infrastructure\Service\Payments\Dwolla\Item\Webhook;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  11. /**
  12.  * Class DwollaEventListener
  13.  */
  14. class DwollaEventListener
  15. {
  16.     /**
  17.      * @var DwollaEventRepositoryInterface
  18.      */
  19.     protected $dwollaEventRepository;
  20.     protected BookstoreTransferRepositoryInterface $bookstoreTransferRepository;
  21.     /**
  22.      * @param DwollaEventRepositoryInterface $dwollaEventRepository
  23.      */
  24.     public function __construct(
  25.         DwollaEventRepositoryInterface $dwollaEventRepository,
  26.         BookstoreTransferRepositoryInterface $bookstoreTransferRepository
  27.     ) {
  28.         $this->dwollaEventRepository $dwollaEventRepository;
  29.         $this->bookstoreTransferRepository $bookstoreTransferRepository;
  30.     }
  31.     /**
  32.      * @param ControllerEvent $event
  33.      */
  34.     public function onController(ControllerEvent $event)
  35.     {
  36.         $request $event->getRequest();
  37.         if (!$request->attributes->has('_dwolla_webhook') || !$request->attributes->has('webhook')) {
  38.             return;
  39.         }
  40.         /** @var Webhook $webhook */
  41.         $webhook $request->attributes->get('webhook');
  42.         $dwollaEvent $this->dwollaEventRepository->findById($webhook->getId());
  43.         $bookstoreTransfer $this->bookstoreTransferRepository->findByResourceId($webhook->getResourceId());
  44.         if ($dwollaEvent instanceof DwollaEvent) {
  45.             $event->setController(function () {
  46.                 return new Response();
  47.             });
  48.             return;
  49.         }
  50.         $dwollaEvent = new DwollaEvent();
  51.         $dwollaEvent
  52.             ->setId($webhook->getId())
  53.             ->setCreated($webhook->getCreated())
  54.             ->setReceived(new DateTime())
  55.             ->setTopic($webhook->getTopic())
  56.             ->setBookstoreTransfer($bookstoreTransfer)
  57.         ;
  58.         $this->dwollaEventRepository->add($dwollaEvent);
  59.         $this->dwollaEventRepository->save($dwollaEvent);
  60.     }
  61. }