<?php
namespace FlexApp\EventSubscriber;
use FlexApp\Entity\ChatB;
use FlexApp\Events\Style43\RegistrationSuccessEvent;
use FlexApp\Events\UserEvent;
use FlexApp\Exceptions\PortalApiClientException;
use FlexApp\Repository\ChatBRepository;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use WebBundle\Helper\PortalHelper;
class RetieChatMessagesOnPortalSubscriber implements EventSubscriberInterface
{
private PortalHelper $portalHelper;
private LoggerInterface $logger;
private ChatBRepository $chatBRepository;
/**
* RetieChatMessagesOnPortalSubscriber constructor.
*
* @param PortalHelper $portalHelper
* @param LoggerInterface $logger
* @param ChatBRepository $chatBRepository
*/
public function __construct(PortalHelper $portalHelper, LoggerInterface $logger, ChatBRepository $chatBRepository)
{
$this->portalHelper = $portalHelper;
$this->logger = $logger;
$this->chatBRepository = $chatBRepository;
}
public static function getSubscribedEvents(): array
{
return [
RegistrationSuccessEvent::class => [
['retieChatMessagesOnPortal', 0],
],
];
}
public function retieChatMessagesOnPortal(UserEvent $userEvent)
{
$user = $userEvent->getUser();
$token = $user->getToken();
/** @var ChatB $chat */
$chat = $this->chatBRepository->findOneBy(['token' => $token]);
if (!$chat) {
return;
}
if (0 === sizeof($chat->getMessages())) {
return;
}
try {
$this->portalHelper->retieChatMessagesOnPortal($token, $user, true);
} catch (PortalApiClientException $e) {
$this->logger->warning($e->getMessage());
}
}
}