<?php
namespace Nellapp\Bundle\SDKBundle\Export\AutoRefresh\EventSubscriber;
use Nellapp\Bundle\SDKBundle\Export\AutoRefresh\AutoRefreshTerminateTracker;
use Nellapp\Bundle\SDKBundle\Export\AutoRefresh\Resolvers\AutoRefreshTerminateResolverManager;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Contracts\EventDispatcher\Event;
use Symfony\Component\Console\ConsoleEvents;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\TerminateEvent;
class TerminateRefreshSubscriber implements EventSubscriberInterface
{
public function __construct(
private AutoRefreshTerminateTracker $autoRefreshTerminateTracker,
private AutoRefreshTerminateResolverManager $autoRefreshTerminateResolverManager,
)
{
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::TERMINATE => 'refreshTracked',
ConsoleEvents::TERMINATE => 'refreshTracked',
];
}
public function refreshTracked(Event $event): void
{
if ($event instanceof TerminateEvent) {
foreach ($this->autoRefreshTerminateTracker->getRefreshExportableEntities() as $className => $entityIds) {
$autoRefreshTerminateResolver = $this->autoRefreshTerminateResolverManager->getAutoRefreshTerminateResolver($className);
$autoRefreshTerminateResolver?->refreshExports($entityIds);
}
}
}
}