src/Service/App/Merchant/EventListener/UserActionLogListener.php line 51

Open in your IDE?
  1. <?php
  2. namespace App\Service\App\Merchant\EventListener;
  3. use App\Core\Exception\UnexpectedException;
  4. use App\Core\Security\Authenticator\Contract\IMerchantUser;
  5. use App\Core\Security\Contract\ISecurityHelper;
  6. use App\Entity\Merchant\UserActionLogEntity;
  7. use App\Repository\Merchant\Contract\IUserActionLogRepository;
  8. use App\Service\App\Merchant\Event\MerchantUserActionEvent;
  9. use Symfony\Component\HttpFoundation\RequestStack;
  10. class UserActionLogListener
  11. {
  12.     /**
  13.      * @var ISecurityHelper
  14.      */
  15.     private ISecurityHelper $security;
  16.     /**
  17.      * @var IUserActionLogRepository
  18.      */
  19.     private IUserActionLogRepository $repository;
  20.     /**
  21.      * @var RequestStack
  22.      */
  23.     private RequestStack $requestStack;
  24.     /**
  25.      * UserActionLogListener constructor.
  26.      *
  27.      * @param ISecurityHelper $security
  28.      * @param IUserActionLogRepository $repository
  29.      * @param RequestStack $requestStack
  30.      */
  31.     public function __construct(ISecurityHelper $securityIUserActionLogRepository $repositoryRequestStack $requestStack)
  32.     {
  33.         $this->security $security;
  34.         $this->repository $repository;
  35.         $this->requestStack $requestStack;
  36.     }
  37.     /**
  38.      * Handle merchant user action
  39.      *
  40.      * @param MerchantUserActionEvent $event
  41.      * @throws UnexpectedException
  42.      */
  43.     public function onAction(MerchantUserActionEvent $event): void
  44.     {
  45.         $user $this->security->getUser();
  46.         if ($user instanceof IMerchantUser) {
  47.             $request $this->requestStack->getCurrentRequest();
  48.             $ip 'undefined';
  49.             if ($request && $request->getClientIp()) {
  50.                 $ip $request->getClientIp();
  51.             }
  52.             $this->repository->addLog(new UserActionLogEntity(
  53.                 $event->getActionType(),
  54.                 $event->getObjectType(),
  55.                 $event->getObjectId(),
  56.                 $event->getDescription(),
  57.                 $ip$user
  58.             ));
  59.         } else {
  60.             throw new UnexpectedException('Invalid user type performed action'500);
  61.         }
  62.     }
  63. }