p100
This commit is contained in:
68
src/Controller/Admin/AdminEvalController.php
Normal file
68
src/Controller/Admin/AdminEvalController.php
Normal 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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user