<?php
namespace App\Service\App\Merchant\EventListener;
use App\Core\Security\Authenticator\Contract\IMerchantUser;
use App\Core\Security\Contract\ISecurityHelper;
use App\Repository\Merchant\Contract\IUserRepository;
use Doctrine\ORM\Exception\ORMException;
use Symfony\Component\HttpKernel\Event\RequestEvent;
class UserActivityListener
{
/**
* @var ISecurityHelper
*/
private ISecurityHelper $security;
/**
* @var IUserRepository
*/
private IUserRepository $repository;
/**
* UserActivityListener constructor.
*
* @param ISecurityHelper $security
* @param IUserRepository $repository
*/
public function __construct(ISecurityHelper $security, IUserRepository $repository)
{
$this->security = $security;
$this->repository = $repository;
}
/**
* @param RequestEvent $event
*/
public function onRequest(RequestEvent $event): void
{
$user = $this->security->getUser();
if ($user instanceof IMerchantUser) {
if ($user->updateLastAccessTime()) {
try {
$this->repository->save($user);
} catch (ORMException) {
// it could be deadlock issue, just skip it, because it is not important
}
}
}
}
}