ContentRepository.php

Code Hygiene Score: 75

Keine Issues gefunden.

Dependencies 9

Klassen 1

Funktionen 20

Verwendet von 1

Versionen 22

Code

<?php

declare(strict_types=1);

namespace Infrastructure\Persistence;

// @responsibility: Persistenz für Content-Konfigurationen

use Domain\Repository\ContentOrderRepositoryInterface;
use Domain\Repository\ContentRepositoryInterface;
use Domain\Repository\ContentSourceRepositoryInterface;
use Domain\Repository\ContentVersionRepositoryInterface;

class ContentRepository implements ContentRepositoryInterface
{
    private \PDO $pdo;
    private ContentOrderRepositoryInterface $orderRepository;
    private ContentVersionRepositoryInterface $versionRepository;
    private ContentSourceRepositoryInterface $sourceRepository;

    public function __construct(
        \PDO $pdo,
        ContentOrderRepositoryInterface $orderRepository,
        ContentVersionRepositoryInterface $versionRepository,
        ContentSourceRepositoryInterface $sourceRepository
    ) {
        $this->pdo = $pdo;
        $this->orderRepository = $orderRepository;
        $this->versionRepository = $versionRepository;
        $this->sourceRepository = $sourceRepository;
    }

    // ==================== Delegation to specialized repositories ====================

    public function findAllOrders(array $filters = [], int $limit = 50, int $offset = 0): array
    {
        return $this->orderRepository->findAllOrders($filters, $limit, $offset);
    }

    public function findOrder(int $id): ?array
    {
        return $this->orderRepository->findOrder($id);
    }

    public function getLastOrderSettings(): array
    {
        return $this->orderRepository->getLastOrderSettings();
    }

    public function createOrder(array $data): int
    {
        return $this->orderRepository->createOrder($data);
    }

    public function updateOrderStatus(int $id, string $status): void
    {
        $this->orderRepository->updateOrderStatus($id, $status);
    }

    public function updateGenerationStatus(int $id, string $status, ?string $error = null): void
    {
        $this->orderRepository->updateGenerationStatus($id, $status, $error);
    }

    public function updateCritiqueStatus(int $id, string $status, ?string $error = null): void
    {
        $this->orderRepository->updateCritiqueStatus($id, $status, $error);
    }

    public function updateOrder(int $id, array $data): bool
    {
        return $this->orderRepository->updateOrder($id, $data);
    }

    public function findVersionsByOrder(int $orderId): array
    {
        return $this->versionRepository->findVersionsByOrder($orderId);
    }

    public function findLatestVersion(int $orderId): ?array
    {
        return $this->versionRepository->findLatestVersion($orderId);
    }

    public function findVersion(int $id): ?array
    {
        return $this->versionRepository->findVersion($id);
    }

    public function findCritiquesByVersion(int $versionId): array
    {
        return $this->versionRepository->findCritiquesByVersion($versionId);
    }

    public function findSourcesByOrder(int $orderId): array
    {
        return $this->sourceRepository->findSourcesByOrder($orderId);
    }

    // ==================== Profiles ====================

    public function findAllProfiles(): array
    {
        $stmt = $this->pdo->query("
            SELECT id, name, slug, content as config
            FROM content_config
            WHERE type = 'author_profile' AND status = 'active'
            ORDER BY name
        ");

        return $stmt->fetchAll();
    }

    // ==================== Contracts ====================

    public function findAllContracts(): array
    {
        $stmt = $this->pdo->query("
            SELECT id, name, slug, content as config
            FROM content_config
            WHERE type = 'contract' AND status = 'active'
            ORDER BY name
        ");

        return $stmt->fetchAll();
    }

    // ==================== Structures ====================

    public function findAllStructures(): array
    {
        $stmt = $this->pdo->query("
            SELECT id, name, slug, content as config
            FROM content_config
            WHERE type = 'structure' AND status = 'active'
            ORDER BY name
        ");

        return $stmt->fetchAll();
    }

    // ==================== Critics ====================

    public function findAllCritics(): array
    {
        $stmt = $this->pdo->query("
            SELECT id, name, slug, content as config, description
            FROM content_config
            WHERE type = 'critic' AND status = 'active'
            ORDER BY sort_order, name
        ");

        return $stmt->fetchAll();
    }

    // ==================== System Prompts ====================

    public function findAllSystemPrompts(): array
    {
        $stmt = $this->pdo->query("
            SELECT id, name, slug, content as config, description
            FROM content_config
            WHERE type = 'system_prompt' AND status = 'active'
            ORDER BY name
        ");

        return $stmt->fetchAll();
    }

    // ==================== Statistics ====================

    public function getStatistics(): array
    {
        $orderStats = $this->orderRepository->getStatistics();

        // Add version and critique counts
        $stmt = $this->pdo->query('SELECT COUNT(*) FROM content_versions');
        $orderStats['total_versions'] = (int) $stmt->fetchColumn();

        $stmt = $this->pdo->query('SELECT COUNT(*) FROM content_critiques');
        $orderStats['total_critiques'] = (int) $stmt->fetchColumn();

        return $orderStats;
    }
}
← Übersicht Graph