Backup #758

ID758
Dateipfad/var/www/dev.campus.systemische-tools.de/src/Infrastructure/Config/DatabaseFactory.php
Version1
Typ modified
Größe2.3 KB
Hashdc698e9fcdf9a6e693d4de70898f1aad13068c136fc19be7abb3942a76606091
Datum2025-12-23 08:00:40
Geändert vonclaude-code-hook
GrundClaude Code Pre-Hook Backup vor Edit-Operation
Datei existiert Ja

Dateiinhalt

<?php

declare(strict_types=1);

namespace Infrastructure\Config;

use PDO;
use RuntimeException;

/**
 * Central database connection factory.
 *
 * Provides named connections to different databases:
 * - 'dev': ki_dev database (dokumentation, chunks, protokoll, tasks, contracts)
 * - 'content': ki_content database (content studio, semantic data)
 *
 * Connections are cached per-request for efficiency.
 */
final class DatabaseFactory
{
    private const array DATABASES = [
        'dev' => 'ki_dev',
        'content' => 'ki_content',
    ];

    /** @var array<string, PDO> */
    private static array $connections = [];

    /**
     * Gets the 'dev' database connection (ki_dev).
     *
     * Contains: dokumentation, dokumentation_chunks, tasks, contracts, protokoll
     */
    public static function dev(): PDO
    {
        return self::getConnection('dev');
    }

    /**
     * Gets the 'content' database connection (ki_content).
     *
     * Contains: content studio data, semantic entities, relations
     */
    public static function content(): PDO
    {
        return self::getConnection('content');
    }

    /**
     * Gets a connection by name.
     *
     * @param string $name Connection name ('dev' or 'content')
     */
    public static function getConnection(string $name): PDO
    {
        if (!isset(self::DATABASES[$name])) {
            throw new RuntimeException("Unknown database connection: {$name}");
        }

        if (!isset(self::$connections[$name])) {
            self::$connections[$name] = self::createConnection(self::DATABASES[$name]);
        }

        return self::$connections[$name];
    }

    /**
     * Closes all connections and clears the cache.
     */
    public static function closeAll(): void
    {
        self::$connections = [];
    }

    /**
     * Creates a new PDO connection.
     */
    private static function createConnection(string $database): PDO
    {
        $password = CredentialService::getMariaDbPassword();

        return new PDO(
            "mysql:host=localhost;dbname={$database};charset=utf8mb4",
            'root',
            $password,
            [
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                PDO::ATTR_EMULATE_PREPARES => false,
            ]
        );
    }
}

Vollständig herunterladen

Aktionen

Herunterladen

Andere Versionen dieser Datei

ID Version Typ Größe Datum
1362 3 modified 2.1 KB 2025-12-25 16:55
760 2 modified 2.1 KB 2025-12-23 08:00
758 1 modified 2.3 KB 2025-12-23 08:00

← Zurück zur Übersicht