src/Component/ExternalIntegration/EventSubscriber/SendApplicationSubscriber.php line 31

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Component\ExternalIntegration\EventSubscriber;
  4. use App\Component\ExternalIntegration\AbstractExternalIntegration;
  5. use App\Component\ExternalIntegration\DependencyInjection\ExternalIntegrationCollection;
  6. use App\Component\ExternalIntegration\Message\Command\SendApplication;
  7. use App\Enum\DataTypeEnum;
  8. use App\Event\ApplicantEvent;
  9. use App\Util\TypeUtil;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\Messenger\MessageBusInterface;
  12. class SendApplicationSubscriber implements EventSubscriberInterface
  13. {
  14.     public function __construct(
  15.         private readonly ExternalIntegrationCollection $externalIntegrationCollection,
  16.         private readonly MessageBusInterface $messageBus,
  17.     ) {
  18.     }
  19.     public static function getSubscribedEvents(): array
  20.     {
  21.         return [
  22.             ApplicantEvent::EVENT_POST_PERSIST => 'onApplicantPostPersist',
  23.         ];
  24.     }
  25.     public function onApplicantPostPersist(ApplicantEvent $applicantEvent): void
  26.     {
  27.         $applicant $applicantEvent->getApplicant();
  28.         $externalReference $applicant->getExternalVacancyReference() ?? '';
  29.         if (TypeUtil::checkTypeAndTruthy($externalReferenceDataTypeEnum::STRING)
  30.             && $this->externalIntegrationCollection->hasActiveExternalIntegrations()
  31.         ) {
  32.             $activeExternalIntegrations $this->externalIntegrationCollection->getActiveExternalIntegrations();
  33.             /** @var AbstractExternalIntegration $firstActiveIntegration */
  34.             $firstActiveIntegration reset($activeExternalIntegrations);
  35.             $externalReference $firstActiveIntegration::getReference();
  36.         }
  37.         // only accept vacancies with valid external reference
  38.         if (!TypeUtil::checkTypeAndTruthy($externalReferenceDataTypeEnum::STRING)
  39.             || !\is_int($applicant->getId())
  40.         ) {
  41.             return;
  42.         }
  43.         $this->messageBus->dispatch(new SendApplication($applicant->getId(), $externalReference));
  44.     }
  45. }