<?php
declare(strict_types=1);
namespace App\EventListener;
use App\Entity\Project\Transaction;
use App\Infrastructure\Event\MobileUserActivatedEvent;
use App\Repository\Project\ProjectTaskRepository;
use App\Service\Workflow\TaskManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
use Throwable;
#[AsEventListener(event: MobileUserActivatedEvent::class, method: 'onUserActivated')]
final class MobileUserActivatedListener
{
public function __construct(
private readonly ProjectTaskRepository $projectTaskRepository,
private readonly TaskManager $taskManager,
private readonly EntityManagerInterface $entityManager
) {
}
/**
* @throws Throwable
*/
public function onUserActivated(MobileUserActivatedEvent $event)
{
$user = $event->getUser();
$transactions = [];
foreach ($this->projectTaskRepository->findProcessedRoleAssignedByPhone($user->getPhone()) as $projectTask) {
if (!isset($transactions[$projectTask->getContext()->getProject()->getId()])) {
$transaction = new Transaction($projectTask->getContext()->getProject());
$this->entityManager->persist($transaction);
$transactions[$projectTask->getContext()->getProject()->getId()] = $transaction;
}
$this->taskManager->completeProjectTask($projectTask, $transactions[$projectTask->getContext()->getProject()->getId()]);
}
}
}