<?php
namespace App\EventSubscriber\App;
use App\Features\ProviderMessage\Event\ProviderMessageBaseEvent;
use App\Features\ProviderMessage\Event\ProviderMessageFailedEvent;
use App\Features\ProviderMessage\Event\ProviderMessageFirstSentEvent;
use App\Features\ProviderMessage\Event\ProviderMessageSentEvent;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ProviderMessageEventSubscriber implements EventSubscriberInterface
{
public function __construct(private EntityManagerInterface $manager){}
public static function getSubscribedEvents(): array
{
return [
ProviderMessageSentEvent::NAME => 'notify',
ProviderMessageFirstSentEvent::NAME => 'notify',
ProviderMessageFailedEvent::NAME => 'notify',
];
}
public function notify(ProviderMessageBaseEvent $event): void
{
$message = $event->getMessage();
if($event instanceof ProviderMessageSentEvent || $event instanceof ProviderMessageFirstSentEvent) {
$message->setLastSentAt(new \DateTime());
if($event instanceof ProviderMessageFirstSentEvent) {
$message->setSentAt(new \DateTimeImmutable());
}
}
$this->manager->flush();
}
}