src/Service/Subscribers/FailedMessageQueueSubscriber.php line 42

Open in your IDE?
  1. <?php
  2. namespace App\Service\Subscribers;
  3. use App\Message\ReadService;
  4. use App\Repository\ServiceRepository;
  5. use App\Repository\UserRepository;
  6. use App\Service\Email\EmailService;
  7. use App\Util\UserRole;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
  10. use Symfony\Contracts\Translation\TranslatorInterface;
  11. class FailedMessageQueueSubscriber implements EventSubscriberInterface
  12. {
  13.     use UserRole;
  14.     private $emailService;
  15.     private $userRepository;
  16.     private $translator;
  17.     private $serviceRepository;
  18.     public function __construct(
  19.         EmailService $emailService,
  20.         UserRepository $userRepository,
  21.         TranslatorInterface $translator,
  22.         ServiceRepository $serviceRepository
  23.     ) {
  24.         $this->emailService $emailService;
  25.         $this->userRepository $userRepository;
  26.         $this->translator $translator;
  27.         $this->serviceRepository $serviceRepository;
  28.     }
  29.     public static function getSubscribedEvents(): array
  30.     {
  31.         return [
  32.             WorkerMessageFailedEvent::class => ['notify'],
  33.         ];
  34.     }
  35.     public function notify(WorkerMessageFailedEvent $event)
  36.     {
  37.         if ($event->willRetry()) {
  38.             return;
  39.         }
  40.         if (get_class($event->getEnvelope()->getMessage()) === ReadService::class){
  41.             $superAdmins $this->userRepository->findUsersByrole($this->roleSuperAdmin);
  42.             $subject $this->translator->trans('email.failed-read.subject');
  43.             $serviceId $event->getEnvelope()->getMessage()->getServiceId();
  44.             $service $this->serviceRepository->findById($serviceId);
  45.             foreach ($superAdmins as $superAdmin) {
  46.                 if ($superAdmin->getEmail()) {
  47.                     $this->emailService->send($superAdmin->getEmail(), $subject'emails/failed-read.html.twig', ['serviceName' => $service->getName()]);
  48.                 }
  49.             }
  50.         }
  51.     }
  52. }