<?php
declare(strict_types=1);
namespace BitBag\OpenMarketplace\Component\ProductComparer\EventListener;
use BitBag\OpenMarketplace\Component\ProductComparer\Entity\ComparerInterface;
use BitBag\OpenMarketplace\Component\ProductComparer\Repository\ComparerRepositoryInterface;
use BitBag\OpenMarketplace\Component\Vendor\Entity\ShopUserInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Http\Event\LogoutEvent;
final class LogoutListener
{
public function __construct(
private ComparerRepositoryInterface $comparerRepository,
private EntityManagerInterface $entityManager,
) {
}
public function onLogout(LogoutEvent $event): void
{
$token = $event->getToken();
if (null === $token) {
return;
}
$shopUser = $token->getUser();
if (!$shopUser instanceof ShopUserInterface) {
return;
}
$comparer = $this->comparerRepository->findOneByShopUser($shopUser);
if (!$comparer instanceof ComparerInterface) {
return;
}
foreach ($comparer->getComparerProducts() as $comparerProduct) {
$comparer->removeComparerProduct($comparerProduct);
}
$this->entityManager->persist($comparer);
$this->entityManager->flush();
}
}