CritiqueDTO.php
- Pfad:
src/Domain/DTO/CritiqueDTO.php - Namespace: Domain\DTO
- Zeilen: 91 | Größe: 2,740 Bytes
- Geändert: 2025-12-25 11:17:31 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 100
- Dependencies: 100 (25%)
- LOC: 100 (20%)
- Methods: 100 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Keine Issues gefunden.
Dependencies 1
- constructor DateTimeImmutable
Klassen 1
-
CritiqueDTOclass Zeile 9
Funktionen 5
-
__construct()public Zeile 11 -
fromDatabaseRow()public Zeile 32 -
hasScore()public Zeile 66 -
scorePercentage()public Zeile 74 -
feedbackPreview()public Zeile 82
Versionen 1
-
v1
2025-12-25 10:49 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Write-Operation
Code
<?php
declare(strict_types=1);
namespace Domain\DTO;
// @responsibility: DTO für Content-Kritik-Daten aus Repository
final readonly class CritiqueDTO
{
public function __construct(
public int $id,
public int $versionId,
public int $criticId,
public string $criticName,
public string $feedback,
public ?int $score,
public string $model,
public int $tokensInput,
public int $tokensOutput,
public float $costUsd,
public int $durationMs,
public \DateTimeImmutable $createdAt,
) {
}
/**
* Create from database row.
*
* @param array<string, mixed> $row
*/
public static function fromDatabaseRow(array $row): self
{
$id = isset($row['id']) ? (int) $row['id'] : 0;
$versionId = isset($row['version_id']) ? (int) $row['version_id'] : 0;
$criticId = isset($row['critic_id']) ? (int) $row['critic_id'] : 0;
$criticName = isset($row['critic_name']) ? (string) $row['critic_name'] : 'Unbekannt';
$feedback = isset($row['feedback']) ? (string) $row['feedback'] : '';
$score = isset($row['score']) ? (int) $row['score'] : null;
$model = isset($row['model']) ? (string) $row['model'] : 'unknown';
$tokensInput = isset($row['tokens_input']) ? (int) $row['tokens_input'] : 0;
$tokensOutput = isset($row['tokens_output']) ? (int) $row['tokens_output'] : 0;
$costUsd = isset($row['cost_usd']) ? (float) $row['cost_usd'] : 0.0;
$durationMs = isset($row['duration_ms']) ? (int) $row['duration_ms'] : 0;
$createdAtStr = isset($row['created_at']) ? (string) $row['created_at'] : 'now';
return new self(
id: $id,
versionId: $versionId,
criticId: $criticId,
criticName: $criticName,
feedback: $feedback,
score: $score,
model: $model,
tokensInput: $tokensInput,
tokensOutput: $tokensOutput,
costUsd: $costUsd,
durationMs: $durationMs,
createdAt: new \DateTimeImmutable($createdAtStr),
);
}
/**
* Check if critique has a score.
*/
public function hasScore(): bool
{
return $this->score !== null;
}
/**
* Get score as percentage (0-100).
*/
public function scorePercentage(): ?int
{
return $this->score;
}
/**
* Get feedback preview.
*/
public function feedbackPreview(int $length = 150): string
{
if (mb_strlen($this->feedback) <= $length) {
return $this->feedback;
}
return mb_substr($this->feedback, 0, $length) . '...';
}
}