This commit is contained in:
team 1
2026-05-12 08:57:57 +02:00
parent 03d4a1d7c3
commit 0d55c0a439
6 changed files with 769 additions and 7 deletions

View File

@@ -0,0 +1,68 @@
<?php
declare(strict_types=1);
namespace App\Controller\Admin;
use App\Security\ApplicationRoles;
use App\Service\Admin\EvalAdminService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
#[Route('/admin/evals')]
final class AdminEvalController extends AbstractController
{
#[Route('/', name: 'admin_evals_index', methods: ['GET'])]
public function index(Request $request, EvalAdminService $evals): Response
{
$this->denyAccessUnlessGranted(ApplicationRoles::ROLE_KNOWLEDGE_ADMIN);
$selectedType = trim((string) $request->query->get('type', ''));
if ($selectedType === '' || !in_array($selectedType, $evals->supportedTypeNames(), true)) {
$selectedType = 'retrieval';
}
return $this->render('admin/evals/index.html.twig', [
'types' => $evals->supportedTypes(),
'overview' => $evals->overview(),
'cases_by_type' => $evals->casesByType(),
'selected_type' => $selectedType,
'selected_report' => $evals->readTypeReport($selectedType),
'last_report' => $evals->readLastReport(),
]);
}
#[Route('/run', name: 'admin_evals_run', methods: ['POST'])]
public function run(Request $request, EvalAdminService $evals): Response
{
$this->denyAccessUnlessGranted(ApplicationRoles::ROLE_KNOWLEDGE_ADMIN);
if (!$this->isCsrfTokenValid('admin_eval_run', (string) $request->request->get('_token'))) {
throw $this->createAccessDeniedException();
}
$type = trim((string) $request->request->get('type', 'retrieval'));
$caseId = trim((string) $request->request->get('case_id', ''));
try {
$report = $evals->run($type, $caseId !== '' ? $caseId : null);
$this->addFlash(
((int) ($report['failed'] ?? 0)) === 0 ? 'success' : 'danger',
sprintf(
'Eval %s abgeschlossen: %d/%d bestanden.',
$type,
(int) ($report['passed'] ?? 0),
(int) ($report['total'] ?? 0)
)
);
} catch (\Throwable $e) {
$this->addFlash('danger', $e->getMessage());
}
return $this->redirectToRoute('admin_evals_index', [
'type' => $type,
]);
}
}