CodeListeAction.php
Pfad: src/Infrastructure/Http/CodeListeAction.php
Ext: php
Größe: 2493 Bytes
Geändert: 2026-07-16T10:16:48+02:00
Frühere Version vom 2026-07-16T10:16:48+02:00 · zur aktuellen Fassung
<?php
declare(strict_types=1);
namespace Demo\Infrastructure\Http;
use Demo\Application\Code\ListeCodeDateien;
use Demo\Application\Code\SynchronisiereCodeDateien;
use Demo\Infrastructure\Code\CodeDateiScanner;
/**
* Treibender Adapter: rendert die Uebersicht /code.
*/
final class CodeListeAction
{
/** @var ListeCodeDateien Anwendungsfall. */
private ListeCodeDateien $liste;
/** @var SynchronisiereCodeDateien Anwendungsfall. */
private SynchronisiereCodeDateien $sync;
/** @var CodeDateiScanner Scanner fuer Projektdateien. */
private CodeDateiScanner $scanner;
/** @var TemplateRenderer Template-Renderer. */
private TemplateRenderer $view;
/** @var Navigation Hauptnavigation. */
private Navigation $nav;
/** @var CodeFehlerAntwort Code-Fehlerantworten. */
private CodeFehlerAntwort $fehler;
/**
* @param ListeCodeDateien $liste Anwendungsfall.
* @param SynchronisiereCodeDateien $sync Syncer.
* @param CodeDateiScanner $scanner Dateiscanner.
* @param TemplateRenderer $view Renderer.
* @param Navigation $nav Navigation.
*/
public function __construct(
ListeCodeDateien $liste,
SynchronisiereCodeDateien $sync,
CodeDateiScanner $scanner,
TemplateRenderer $view,
Navigation $nav,
CodeFehlerAntwort $fehler
) {
$this->liste = $liste;
$this->sync = $sync;
$this->scanner = $scanner;
$this->view = $view;
$this->nav = $nav;
$this->fehler = $fehler;
}
/**
* Baut die Uebersicht.
*
* @param array<string,string> $params Routen-Parameter (ungenutzt).
* @return Response HTML-Antwort.
*/
public function __invoke(array $params): Response
{
try {
$this->sync->execute($this->scanner->scan());
$dateien = $this->liste->execute();
} catch (\Throwable $throwable) {
$antwort = $this->fehler->fehlendeCodeTabelle($throwable);
if ($antwort !== null) {
return $antwort;
}
throw $throwable;
}
$html = $this->view->render('layout', [
'inner' => 'code-liste',
'titel' => 'Code',
'aktiv' => '/code',
'nav' => $this->nav->items(),
'dateien' => $dateien,
]);
return new Response(200, 'text/html; charset=UTF-8', $html);
}
}