move controller service logics into a service

This commit is contained in:
team2
2026-02-27 20:28:51 +01:00
parent 66e16a4ae9
commit dd7bae9678
2 changed files with 46 additions and 22 deletions

View File

@@ -4,19 +4,17 @@ declare(strict_types=1);
namespace App\Controller\Admin;
use App\Entity\TagRebuildJob;
use Doctrine\ORM\EntityManagerInterface;
use App\Service\TagRebuildStatusProvider;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\Routing\Attribute\Route;
final class TagRebuildStreamController
{
#[Route('/admin/tags/rebuild/stream', name: 'admin_tags_rebuild_stream')]
public function stream(EntityManagerInterface $em): StreamedResponse
public function stream(TagRebuildStatusProvider $provider): StreamedResponse
{
$response = new StreamedResponse(function () use ($em) {
$response = new StreamedResponse(function () use ($provider) {
// Sofort erstes Event senden (wichtig!)
echo "event: ping\n";
echo "data: " . json_encode(['init' => true]) . "\n\n";
@@ -25,24 +23,11 @@ final class TagRebuildStreamController
while (!connection_aborted()) {
$em->clear();
$data = $provider->getLatestStatus();
$job = $em->createQueryBuilder()
->select('j')
->from(TagRebuildJob::class, 'j')
->orderBy('j.createdAt', 'DESC')
->setMaxResults(1)
->getQuery()
->getOneOrNullResult();
if ($job) {
if ($data !== null) {
echo "event: message\n";
echo "data: " . json_encode([
'status' => $job->getStatus(),
'startedAt' => $job->getStartedAt()?->format(DATE_ATOM),
'finishedAt' => $job->getFinishedAt()?->format(DATE_ATOM),
'error' => $job->getErrorMessage(),
]) . "\n\n";
echo "data: " . json_encode($data) . "\n\n";
@ob_flush();
@flush();
@@ -55,7 +40,7 @@ final class TagRebuildStreamController
$response->headers->set('Content-Type', 'text/event-stream');
$response->headers->set('Cache-Control', 'no-cache');
$response->headers->set('Connection', 'keep-alive');
$response->headers->set('X-Accel-Buffering', 'no'); // 🔥 wichtig bei nginx
$response->headers->set('X-Accel-Buffering', 'no');
return $response;
}