<?php
namespace Nellapp\Bundle\SDKBundle\Export\AutoExport\EventSubscriber;
use Nellapp\Bundle\SDKBundle\Export\AutoExport\Resolvers\ExportTerminateResolverManager;
use Nellapp\Bundle\SDKBundle\Export\AutoExport\AutoExportTerminateTracker;
use Symfony\Component\Console\ConsoleEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\TerminateEvent;
use Symfony\Component\Console\Event\ConsoleTerminateEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Contracts\EventDispatcher\Event;
class TerminateExportSubscriber implements EventSubscriberInterface
{
public function __construct(
private AutoExportTerminateTracker $terminateTracker,
private ExportTerminateResolverManager $exportTerminateResolverManager,
)
{
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::TERMINATE => 'exportTracked',
ConsoleEvents::TERMINATE => 'exportTracked',
];
}
public function exportTracked(Event $event): void
{
if (!$event instanceof TerminateEvent && !$event instanceof ConsoleTerminateEvent) {
return;
}
foreach ($this->terminateTracker->getTrackedEntities() as $resolverClass => $entityIds) {
$exportTerminateResolver = $this->exportTerminateResolverManager->getExportTerminateResolverByClass($resolverClass);
if ($exportTerminateResolver === null) {
continue;
}
$exportTerminateResolver->exportTracked($entityIds);
}
}
}