src/EventSubscriber/App/ProviderMessageEventSubscriber.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\App;
  3. use App\Features\ProviderMessage\Event\ProviderMessageBaseEvent;
  4. use App\Features\ProviderMessage\Event\ProviderMessageFailedEvent;
  5. use App\Features\ProviderMessage\Event\ProviderMessageFirstSentEvent;
  6. use App\Features\ProviderMessage\Event\ProviderMessageSentEvent;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class ProviderMessageEventSubscriber implements EventSubscriberInterface
  10. {
  11.     public function __construct(private EntityManagerInterface $manager){}
  12.     public static function getSubscribedEvents(): array
  13.     {
  14.         return [
  15.             ProviderMessageSentEvent::NAME => 'notify',
  16.             ProviderMessageFirstSentEvent::NAME => 'notify',
  17.             ProviderMessageFailedEvent::NAME => 'notify',
  18.         ];
  19.     }
  20.     public function notify(ProviderMessageBaseEvent $event): void
  21.     {
  22.         $message $event->getMessage();
  23.         if($event instanceof ProviderMessageSentEvent || $event instanceof ProviderMessageFirstSentEvent) {
  24.             $message->setLastSentAt(new \DateTime());
  25.             if($event instanceof ProviderMessageFirstSentEvent) {
  26.                 $message->setSentAt(new \DateTimeImmutable());
  27.             }
  28.         }
  29.         $this->manager->flush();
  30.     }
  31. }