← Code-Übersicht

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);
    }
}