← Code-Übersicht

AbgleichAction.php

Pfad: src/Infrastructure/Http/AbgleichAction.php

Ext: php

Größe: 1684 Bytes

Geändert: 2026-07-16 00:35:04+02

<?php
declare(strict_types=1);

namespace Demo\Infrastructure\Http;

use Demo\Application\Abgleich\PruefeKatalog;
use Demo\Domain\Abgleich\Abweichung;

/**
 * Treibender Adapter: zeigt den read-only Katalog-Realitaets-Abgleich unter /abgleich.
 */
final class AbgleichAction
{
    /** @var PruefeKatalog Anwendungsfall. */
    private PruefeKatalog $pruefe;

    /** @var TemplateRenderer Template-Renderer. */
    private TemplateRenderer $view;

    /** @var Navigation Hauptnavigation. */
    private Navigation $nav;

    /**
     * @param PruefeKatalog    $pruefe Anwendungsfall.
     * @param TemplateRenderer $view   Renderer.
     * @param Navigation       $nav    Navigation.
     */
    public function __construct(PruefeKatalog $pruefe, TemplateRenderer $view, Navigation $nav)
    {
        $this->pruefe = $pruefe;
        $this->view = $view;
        $this->nav = $nav;
    }

    /**
     * Baut die Abgleichsseite.
     *
     * @param array<string,string> $params Routen-Parameter (ungenutzt).
     * @return Response HTML-Antwort.
     */
    public function __invoke(array $params): Response
    {
        $befunde = $this->pruefe->execute();
        $fehlend = 0;
        foreach ($befunde as $b) {
            if ($b->befund === Abweichung::FEHLT_REAL) {
                $fehlend++;
            }
        }
        $html = $this->view->render('layout', [
            'inner' => 'abgleich',
            'titel' => 'Abgleich',
            'aktiv' => '/abgleich',
            'nav' => $this->nav->items(),
            'befunde' => $befunde,
            'fehlend' => $fehlend,
        ]);

        return new Response(200, 'text/html; charset=UTF-8', $html);
    }
}