Backup #1224
| ID | 1224 |
| Dateipfad | /var/www/dev.campus.systemische-tools.de/src/Domain/DTO/ContentOrderDTO.php |
| Version | 3 |
| Typ |
modified |
| Größe | 4.3 KB |
| Hash | 2810bbb13c3b6dbdfff46be442905304419991e2765dc2e5c6c5d75e6ef2ab43 |
| Datum | 2025-12-25 10:50:26 |
| Geändert von | claude-code-hook |
| Grund | Claude Code Pre-Hook Backup vor Edit-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
{
$id = isset($row['id']) ? (int) $row['id'] : 0;
$title = isset($row['title']) ? (string) $row['title'] : '';
$briefing = isset($row['briefing']) ? (string) $row['briefing'] : '';
$model = isset($row['model']) ? (string) $row['model'] : '';
$collections = self::parseCollections($row['collections'] ?? '');
$contextLimit = isset($row['context_limit']) ? (int) $row['context_limit'] : 3;
$generationStatusStr = isset($row['generation_status']) ? (string) $row['generation_status'] : 'idle';
$critiqueStatusStr = isset($row['critique_status']) ? (string) $row['critique_status'] : 'idle';
$createdAtStr = isset($row['created_at']) ? (string) $row['created_at'] : 'now';
$updatedAtStr = isset($row['updated_at']) ? (string) $row['updated_at'] : null;
return new self(
id: $id,
title: $title,
briefing: $briefing,
model: $model,
collections: $collections,
contextLimit: $contextLimit,
generationStatus: GenerationStatus::from($generationStatusStr),
critiqueStatus: CritiqueStatus::from($critiqueStatusStr),
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($createdAtStr),
updatedAt: $updatedAtStr !== null ? new \DateTimeImmutable($updatedAtStr) : null,
latestVersionId: isset($row['latest_version_id']) ? (int) $row['latest_version_id'] : null,
authorProfileName: isset($row['author_profile_name']) ? (string) $row['author_profile_name'] : null,
contractName: isset($row['contract_name']) ? (string) $row['contract_name'] : null,
structureName: isset($row['structure_name']) ? (string) $row['structure_name'] : null,
);
}
/**
* Parse comma-separated collections or JSON array.
*
* @return array<string>
*/
private static function parseCollections(mixed $collections): array
{
if (is_array($collections)) {
/** @var array<mixed> $collections */
return array_values(array_map(fn(mixed $v): string => (string) $v, $collections));
}
if (!is_string($collections) || $collections === '') {
return [];
}
// Try JSON first
$decoded = json_decode($collectionsStr, true);
if (is_array($decoded)) {
return array_map('strval', $decoded);
}
// Fall back to comma-separated
return array_values(array_filter(array_map('trim', explode(',', $collectionsStr))));
}
/**
* 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
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