<?php
namespace App\Controller\Security;
use ApiPlatform\Core\Exception\ResourceClassNotSupportedException;
use App\Handler\Security\UserHandler;
use App\Model\Security\UserInfo;
use App\Service\Cache\Exception\UnableToSaveKeyException;
use App\V4\Messenger\Message\ResynchronizeBadgesRequest;
use Psr\Cache\CacheException;
use Psr\Cache\InvalidArgumentException;
use ReflectionException;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Serializer\Exception\ExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
class UserAction
{
/**
* @var UserHandler
*/
private $userHandler;
/**
* @var MessageBusInterface
*/
private $bus;
/**
* @param UserHandler $userHandler
* @param MessageBusInterface $bus
*/
public function __construct(UserHandler $userHandler, MessageBusInterface $bus)
{
$this->userHandler = $userHandler;
$this->bus = $bus;
}
/**
* @param $data
*
* @return UserInfo
*
* @throws ClientExceptionInterface
* @throws DecodingExceptionInterface
* @throws RedirectionExceptionInterface
* @throws ReflectionException
* @throws ServerExceptionInterface
* @throws TransportExceptionInterface
* @throws UnableToSaveKeyException
* @throws CacheException
* @throws InvalidArgumentException
* @throws ExceptionInterface
* @throws ResourceClassNotSupportedException
*/
public function __invoke($data): UserInfo
{
$userInfo = $this->userHandler->handle($data);
$this->bus->dispatch((new ResynchronizeBadgesRequest())->setCustomerId($userInfo->getCustomer()->getId()));
return $userInfo;
}
}