cleanup and harden document and ingest service
This commit is contained in:
@@ -8,6 +8,7 @@ use App\Entity\IngestJob;
|
||||
use App\Service\DocumentService;
|
||||
use App\Service\FormatText;
|
||||
use App\Service\IngestJobService;
|
||||
use App\Service\LockService;
|
||||
use Doctrine\DBAL\Connection;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
@@ -60,7 +61,7 @@ class DocumentController extends AbstractController
|
||||
$document = $em->getRepository(Document::class)->find($uuid);
|
||||
|
||||
if (!$document) {
|
||||
throw new NotFoundHttpException();
|
||||
$this->addFlash('danger', 'Das Dokument existiert nicht mehr.');
|
||||
}
|
||||
|
||||
return $this->render('admin/document/show.html.twig', [
|
||||
@@ -422,8 +423,8 @@ class DocumentController extends AbstractController
|
||||
string $id,
|
||||
Request $request,
|
||||
EntityManagerInterface $em,
|
||||
DocumentService $documentService,
|
||||
IngestJobService $jobService,
|
||||
LockService $lockService,
|
||||
): RedirectResponse
|
||||
{
|
||||
if (!$this->isCsrfTokenValid('delete_document', $request->request->get('_token'))) {
|
||||
@@ -442,6 +443,17 @@ class DocumentController extends AbstractController
|
||||
throw $this->createNotFoundException();
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// 🔒 Delete nur erlauben wenn kein anderer Job läuft
|
||||
// ---------------------------------------------------------
|
||||
if (!$lockService->acquire()) {
|
||||
$this->addFlash('danger', 'Ein Ingest-Job läuft bereits. Löschen derzeit nicht möglich.');
|
||||
return $this->redirectToRoute('admin_documents');
|
||||
}
|
||||
|
||||
// Nur Test-Lock – echter Lock im Orchestrator
|
||||
$lockService->release();
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// 1) Delete-Job anlegen (QUEUED)
|
||||
// ---------------------------------------------------------
|
||||
@@ -455,12 +467,7 @@ class DocumentController extends AbstractController
|
||||
);
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// 2) Hard Delete in DB
|
||||
// ---------------------------------------------------------
|
||||
$documentService->delete($document);
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// 3) Hintergrundprozess starten
|
||||
// 2) Hintergrundprozess starten
|
||||
// ---------------------------------------------------------
|
||||
$projectDir = (string)$this->getParameter('kernel.project_dir');
|
||||
$console = $projectDir . '/bin/console';
|
||||
@@ -475,13 +482,13 @@ class DocumentController extends AbstractController
|
||||
|
||||
if (!function_exists('exec')) {
|
||||
$jobService->markFailed($job, 'Server configuration does not allow background execution (exec disabled).');
|
||||
$this->addFlash('danger', 'Dokument gelöscht, aber Index-Bereinigung konnte nicht asynchron gestartet werden.');
|
||||
$this->addFlash('danger', 'Löschen konnte nicht gestartet werden (exec deaktiviert).');
|
||||
return $this->redirectToRoute('admin_documents');
|
||||
}
|
||||
|
||||
exec($cmd);
|
||||
|
||||
$this->addFlash('success', 'Dokument gelöscht. Index-Bereinigung läuft im Hintergrund.');
|
||||
$this->addFlash('success', 'Löschvorgang gestartet. Dokument wird nach Index-Rebuild entfernt.');
|
||||
|
||||
return $this->redirectToRoute('admin_job_show', [
|
||||
'id' => (string)$job->getId(),
|
||||
|
||||
Reference in New Issue
Block a user