<?php
namespace Postroyka\AccountBundle\EventListener;
use Doctrine\ORM\EntityManagerInterface;
use Postroyka\AccountBundle\Provider\ExtendedUserProvider;
use Postroyka\ApiBundle\RabbitMQ\B24\Producers\B24ExportUserProducer;
use Submarine\ConfirmationBundle\Event\ConfirmEvent;
use Submarine\UsersBundle\Service\UsersService;
class AccountChangeEmailListener
{
/**
* @param EntityManagerInterface $entityManager
* @param UsersService $usersService
* @param ExtendedUserProvider $extendedUserProvider
*/
public function __construct(
private EntityManagerInterface $entityManager,
private UsersService $usersService,
private ExtendedUserProvider $extendedUserProvider,
private B24ExportUserProducer $b24ExportUserProducer
)
{}
/**
* @param ConfirmEvent $event
*/
public function onAccountChangeEmail(ConfirmEvent $event)
{
if (!$event->getUserId()) {
return;
}
$user = $this->usersService->getUser($event->getUserId());
if (!$user->getId()) {
return;
}
$data = $event->getConfirmCode()->getData();
$checkUser = $this->usersService->getUserByEmail($data['email']);
if ($checkUser->getId()) {
return;
}
$user->setEmail($data['email']);
$extendedUser = $this->extendedUserProvider->getByUser($user);
$extendedUser->setUpdatedAt();
$this->entityManager->flush();
$this->b24ExportUserProducer->exportUser($extendedUser);
}
}