← Code-Übersicht

PostgresHealthProbe.php

Pfad: src/Infrastructure/Persistence/PostgresHealthProbe.php

Ext: php

Größe: 1346 Bytes

Geändert: 2026-07-15 16:12:41+02

<?php
declare(strict_types=1);

namespace Demo\Infrastructure\Persistence;

use Demo\Domain\Health\HealthProbePort;
use Demo\Domain\Health\HealthReport;
use Throwable;

/**
 * Getriebener Adapter: prueft die Datenbank ueber eine minimale Abfrage
 * und uebersetzt das technische Ergebnis in ein Domaenen-HealthReport.
 */
final class PostgresHealthProbe implements HealthProbePort
{
    /** @var PdoConnectionFactory Fabrik fuer die Datenbankverbindung. */
    private PdoConnectionFactory $factory;

    /**
     * Nimmt die Verbindungs-Fabrik entgegen.
     *
     * @param PdoConnectionFactory $factory Injizierte Verbindungs-Fabrik.
     */
    public function __construct(PdoConnectionFactory $factory)
    {
        $this->factory = $factory;
    }

    /**
     * Fuehrt eine minimale Abfrage aus und meldet Erfolg oder neutralen Misserfolg.
     *
     * @return HealthReport Ergebnis der Datenbankpruefung.
     */
    public function probe(): HealthReport
    {
        try {
            $statement = $this->factory->create()->prepare('SELECT 1');
            $statement->execute();
            return new HealthReport(true, 'database reachable');
        } catch (Throwable $error) {
            error_log(__METHOD__ . ': ' . $error->getMessage());
            return new HealthReport(false, 'database unreachable');
        }
    }
}