<?php
namespace App\EventSubscriber;
use App\Service\Es8N8;
use App\Entity\ChatThread;
use Doctrine\ORM\EntityManagerInterface;
use App\Event\ChatMessagePrePersistEvent;
use App\Event\ChatMessagePostPersistEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ChatMessageSubscriber implements EventSubscriberInterface
{
public function __construct(
private EntityManagerInterface $_em,
private Es8N8 $es8N8,
) {
}
public static function getSubscribedEvents(): array
{
return [
ChatMessagePrePersistEvent::NAME => 'preCreate',
ChatMessagePostPersistEvent::NAME => 'postCreate',
];
}
public function preCreate(ChatMessagePrePersistEvent $event)
{
$object = $event->getObject();
$chatThread = $object->getChatThread();
$chatThread->setLastMessageAt(new \DateTime());
$this->_em->persist($chatThread);
}
public function postCreate(ChatMessagePostPersistEvent $event)
{
$object = $event->getObject();
$thread = $object->getChatThread();
$isCreateChatSupportTicket = $thread->getContainer()->getConfiguration('isCreateChatSupportTicket', false);
if ($isCreateChatSupportTicket && $thread->getThreadType() === ChatThread::THREAD_TYPE_O2O) {
$targetUser = $object->getTargetUser();
if ($targetUser->getUserType() === 'relation_manager') {
$this->es8N8->makeSupportTicket($object);
}
}
}
}