src/MessageHandler/SendCampaignHandler.php line 59

Open in your IDE?
  1. <?php
  2. namespace App\MessageHandler;
  3. use App\Entity\Task;
  4. use App\Message\SendCampaignMessage;
  5. use App\Service\Api\Api;
  6. use App\Service\Api\Tasks;
  7. use App\Service\Campaign\Sender\SendgridSender;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Psr\Container\ContainerInterface;
  10. use Psr\Log\LoggerInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\HttpKernel\KernelEvents;
  13. use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
  14. use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
  15. use Symfony\Contracts\Service\ServiceSubscriberInterface;
  16. class SendCampaignHandler implements MessageHandlerInterface, ServiceSubscriberInterface, EventSubscriberInterface {
  17. /**
  18. * @var EntityManagerInterface
  19. */
  20. private $em;
  21. /**
  22. * @var ContainerInterface
  23. */
  24. private $locator;
  25. /**
  26. * @var Api
  27. */
  28. private $api;
  29. private $logger;
  30. public function __construct(EntityManagerInterface $em, ContainerInterface $locator, LoggerInterface $logger, Api $api)
  31. {
  32. $this->em = $em;
  33. $this->locator = $locator;
  34. $this->api = $api;
  35. $this->logger = $logger;
  36. }
  37. static function getSubscribedServices()
  38. {
  39. return [
  40. SendgridSender::class
  41. ];
  42. }
  43. static function getSubscribedEvents()
  44. {
  45. return [
  46. WorkerMessageFailedEvent::class => [
  47. ['handleFailed', 10]
  48. ]
  49. ];
  50. }
  51. public function handleFailed(WorkerMessageFailedEvent $event)
  52. {
  53. print_r($event->getReceiverName());
  54. }
  55. public function __invoke(SendCampaignMessage $message)
  56. {
  57. $campaignEmail = $message->getCampaignEmail();
  58. $campaignId = $message->getCampaignId();
  59. $sender_class = $message->getSenderClass(); // App\Service\Campaign\Sender\SenderInterface
  60. $sender = $this->locator->get($sender_class);
  61. // Send batch
  62. $sender->sendCampaign($campaignEmail);
  63. $this->logger->debug('Batch Executed, attempting task update if task', [
  64. 'task_id' => $message->getTaskId(),
  65. 'contacts' => count($campaignEmail->getContacts())
  66. ]);
  67. // Update task if we have one
  68. if($message->getTaskId()){
  69. $task = $this->em->find(Task::class, $message->getTaskId());
  70. try{
  71. $this->logger->debug('Batch Executed, attempting task update', [
  72. 'task_id' => $task->getId(),
  73. 'contacts' => count($campaignEmail->getContacts())
  74. ]);
  75. $this->api->get(Tasks::class)->increaseProgress($task, count($campaignEmail->getContacts()));
  76. } catch (\Exception $e){
  77. $this->logger->error('Error updating task progress: '.$e->getMessage(), [
  78. 'task_id' => $task->getId(),
  79. 'contacts' => count($campaignEmail->getContacts())
  80. ]);
  81. }
  82. }
  83. }
  84. }