Backup #1217

ID1217
Dateipfad/var/www/dev.campus.systemische-tools.de/src/Domain/DTO/ContentOrderDTO.php
Version1
Typ modified
Größe3.4 KB
Hash46c07ff7b45fe1e5450d3d5e14f1afc93d7360fd1d54ad1255ba6ba123811ab7
Datum2025-12-25 10:49:07
Geändert vonclaude-code-hook
GrundClaude Code Pre-Hook Backup vor Write-Operation
Datei existiert Ja

Dateiinhalt

<?php

declare(strict_types=1);

namespace Domain\DTO;

use Domain\ValueObject\GenerationStatus;
use Domain\ValueObject\CritiqueStatus;

// @responsibility: DTO für Content-Order-Daten aus Repository

final readonly class ContentOrderDTO
{
    /**
     * @param array<string> $collections
     */
    public function __construct(
        public int $id,
        public string $title,
        public string $briefing,
        public string $model,
        public array $collections,
        public int $contextLimit,
        public GenerationStatus $generationStatus,
        public CritiqueStatus $critiqueStatus,
        public ?int $authorProfileId,
        public ?int $contractId,
        public ?int $structureId,
        public \DateTimeImmutable $createdAt,
        public ?\DateTimeImmutable $updatedAt,
        public ?int $latestVersionId = null,
        public ?string $authorProfileName = null,
        public ?string $contractName = null,
        public ?string $structureName = null,
    ) {}

    /**
     * Create from database row.
     *
     * @param array<string, mixed> $row
     */
    public static function fromDatabaseRow(array $row): self
    {
        return new self(
            id: (int) $row['id'],
            title: (string) $row['title'],
            briefing: (string) $row['briefing'],
            model: (string) $row['model'],
            collections: self::parseCollections($row['collections'] ?? ''),
            contextLimit: (int) ($row['context_limit'] ?? 3),
            generationStatus: GenerationStatus::from((string) ($row['generation_status'] ?? 'idle')),
            critiqueStatus: CritiqueStatus::from((string) ($row['critique_status'] ?? 'idle')),
            authorProfileId: isset($row['author_profile_id']) ? (int) $row['author_profile_id'] : null,
            contractId: isset($row['contract_id']) ? (int) $row['contract_id'] : null,
            structureId: isset($row['structure_id']) ? (int) $row['structure_id'] : null,
            createdAt: new \DateTimeImmutable($row['created_at'] ?? 'now'),
            updatedAt: isset($row['updated_at']) ? new \DateTimeImmutable($row['updated_at']) : null,
            latestVersionId: isset($row['latest_version_id']) ? (int) $row['latest_version_id'] : null,
            authorProfileName: $row['author_profile_name'] ?? null,
            contractName: $row['contract_name'] ?? null,
            structureName: $row['structure_name'] ?? null,
        );
    }

    /**
     * Parse comma-separated collections or JSON array.
     *
     * @return array<string>
     */
    private static function parseCollections(string|array $collections): array
    {
        if (is_array($collections)) {
            return $collections;
        }

        if ($collections === '') {
            return [];
        }

        // Try JSON first
        $decoded = json_decode($collections, true);
        if (is_array($decoded)) {
            return $decoded;
        }

        // Fall back to comma-separated
        return array_filter(array_map('trim', explode(',', $collections)));
    }

    /**
     * Check if generation can be started.
     */
    public function canStartGeneration(): bool
    {
        return $this->generationStatus->canStart();
    }

    /**
     * Check if critique can be started.
     */
    public function canStartCritique(): bool
    {
        return $this->critiqueStatus->canStart() && $this->latestVersionId !== null;
    }
}

Vollständig herunterladen

Aktionen

Herunterladen

Andere Versionen dieser Datei

ID Version Typ Größe Datum
1225 4 modified 4.3 KB 2025-12-25 10:50
1224 3 modified 4.3 KB 2025-12-25 10:50
1223 2 modified 4.3 KB 2025-12-25 10:50
1217 1 modified 3.4 KB 2025-12-25 10:49

← Zurück zur Übersicht