<?php
namespace App\EventSubscribers\Logout;
use App\Entity\User;
use App\Repository\UserRepository;
use App\Services\UserService;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\LogoutEvent;
use Throwable;
class UnlinkCashdeskOnLogoutSubscriber implements EventSubscriberInterface
{
/** @var UserService */
private UserService $userService;
/** @var UserRepository */
private UserRepository $userRepository;
/** @var LoggerInterface */
private LoggerInterface $logger;
public function __construct(UserService $userService, LoggerInterface $logger)
{
$this->userService = $userService;
$this->logger = $logger;
}
public function onLogout(LogoutEvent $event)
{
try {
/** @var User $user */
$user = $event->getToken()->getUser();
if ($user instanceof User) {
$this->userService->releaseCurrentCashdesk($user);
}
} catch (Throwable $t) {
$this->logger->warning(sprintf('[%s] %s', __METHOD__, $t->getMessage()));
}
}
public static function getSubscribedEvents(): array
{
return [
LogoutEvent::class => 'onLogout'
];
}
}