Backup #2000
| ID | 2000 |
| Dateipfad | /var/www/dev.campus.systemische-tools.de/src/Domain/Entity/TaskResult.php |
| Version | 8 |
| Typ |
modified |
| Größe | 7.0 KB |
| Hash | 5c6849b0c014178da751e91530bc6f3a71d3e6e62b6f4ed85ba0e37edfdda8d3 |
| Datum | 2025-12-28 14:17:01 |
| 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\Entity;
// @responsibility: Task-Ergebnis-Entität mit Rich Domain Logic
use Domain\ValueObject\AssigneeType;
use Domain\ValueObject\ExecutionDuration;
use Domain\ValueObject\ExecutionMetrics;
use Domain\ValueObject\ResultStatus;
use Domain\ValueObject\TokenCount;
class TaskResult
{
private ?int $id = null;
private \DateTimeImmutable $createdAt;
public function __construct(
private int $taskId,
private ?int $assignmentId,
private string $executor,
private AssigneeType $executorType,
private ?string $modelName,
private ?string $request,
private ?string $response,
private ExecutionDuration $duration,
private ExecutionMetrics $metrics,
private ResultStatus $status,
private ?string $errorMessage
) {
$this->createdAt = new \DateTimeImmutable();
}
// Factory Methods
public static function builder(int $taskId, string $executor, AssigneeType $executorType): TaskResultBuilder
{
return new TaskResultBuilder($taskId, $executor, $executorType);
}
// Getters - Only for necessary access
public function id(): ?int { return $this->id; }
public function taskId(): int { return $this->taskId; }
public function assignmentId(): ?int { return $this->assignmentId; }
public function executor(): string { return $this->executor; }
public function executorType(): AssigneeType { return $this->executorType; }
public function modelName(): ?string { return $this->modelName; }
public function request(): ?string { return $this->request; }
public function response(): ?string { return $this->response; }
public function duration(): ExecutionDuration { return $this->duration; }
public function metrics(): ExecutionMetrics { return $this->metrics; }
public function status(): ResultStatus { return $this->status; }
public function errorMessage(): ?string { return $this->errorMessage; }
public function createdAt(): \DateTimeImmutable { return $this->createdAt; }
// Setter only for infrastructure (persistence)
public function setId(int $id): void { $this->id = $id; }
// Domain Logic
public function isSuccess(): bool { return $this->status === ResultStatus::SUCCESS; }
public function hasError(): bool { return $this->status === ResultStatus::ERROR; }
public function hasModel(): bool { return $this->modelName !== null; }
public function summary(): string
{
$parts = [$this->executor, $this->status->label()];
if ($this->modelName !== null) {
$parts[] = "({$this->modelName})";
}
return implode(' - ', $parts);
}
// Legacy getters for backward compatibility (deprecated)
public function getId(): ?int { return $this->id; }
public function getTaskId(): int { return $this->taskId; }
public function getAssignmentId(): ?int { return $this->assignmentId; }
public function getExecutor(): string { return $this->executor; }
public function getExecutorType(): AssigneeType { return $this->executorType; }
public function getModelName(): ?string { return $this->modelName; }
public function getRequest(): ?string { return $this->request; }
public function getResponse(): ?string { return $this->response; }
public function getRequestTimestamp(): \DateTimeImmutable { return $this->duration->requestedAt(); }
public function getResponseTimestamp(): ?\DateTimeImmutable { return $this->duration->respondedAt(); }
public function getDurationMs(): ?int { return $this->duration->durationMs(); }
public function getTokensInput(): ?int { return $this->metrics->tokens()->input(); }
public function getTokensOutput(): ?int { return $this->metrics->tokens()->output(); }
public function getTokensTotal(): ?int { return $this->metrics->tokens()->total(); }
public function getCostUsd(): ?float { return $this->metrics->costUsd(); }
public function getStatus(): string { return $this->status->value; }
public function getErrorMessage(): ?string { return $this->errorMessage; }
public function getCreatedAt(): \DateTimeImmutable { return $this->createdAt; }
// Serialization
public function toArray(): array
{
$durationData = $this->duration->toArray();
$metricsData = $this->metrics->toArray();
return [
'id' => $this->id,
'task_id' => $this->taskId,
'assignment_id' => $this->assignmentId,
'executor' => $this->executor,
'executor_type' => $this->executorType->value,
'model_name' => $this->modelName,
'request' => $this->request,
'response' => $this->response,
'request_timestamp' => $durationData['requested_at'],
'response_timestamp' => $durationData['responded_at'],
'duration_ms' => $durationData['duration_ms'],
'tokens_input' => $metricsData['tokens_input'],
'tokens_output' => $metricsData['tokens_output'],
'tokens_total' => $metricsData['tokens_total'],
'cost_usd' => $metricsData['cost_usd'],
'status' => $this->status->value,
'error_message' => $this->errorMessage,
'created_at' => $this->createdAt->format('Y-m-d H:i:s.u'),
];
}
public static function fromArray(array $data): self
{
$executorType = AssigneeType::from($data['executor_type']);
$status = isset($data['status']) ? ResultStatus::from($data['status']) : ResultStatus::SUCCESS;
$requestTimestamp = isset($data['request_timestamp'])
? new \DateTimeImmutable($data['request_timestamp'])
: new \DateTimeImmutable();
$responseTimestamp = isset($data['response_timestamp'])
? new \DateTimeImmutable($data['response_timestamp'])
: null;
$duration = $responseTimestamp !== null
? ExecutionDuration::completed($requestTimestamp, $responseTimestamp)
: ExecutionDuration::start($requestTimestamp);
$tokens = TokenCount::fromNullable(
$data['tokens_input'] ?? null,
$data['tokens_output'] ?? null
);
$metrics = ExecutionMetrics::create(
$tokens,
isset($data['cost_usd']) ? (float) $data['cost_usd'] : null,
isset($data['duration_ms']) ? (int) $data['duration_ms'] : null
);
$result = new self(
(int) $data['task_id'],
isset($data['assignment_id']) ? (int) $data['assignment_id'] : null,
$data['executor'],
$executorType,
$data['model_name'] ?? null,
$data['request'] ?? null,
$data['response'] ?? null,
$duration,
$metrics,
$status,
$data['error_message'] ?? null
);
if (isset($data['id'])) {
$result->setId((int) $data['id']);
}
if (isset($data['created_at'])) {
$result->createdAt = new \DateTimeImmutable($data['created_at']);
}
return $result;
}
}
Vollständig herunterladen
Aktionen
Andere Versionen dieser Datei
| ID |
Version |
Typ |
Größe |
Datum |
| 2000 |
8 |
modified |
7.0 KB |
2025-12-28 14:17 |
| 1949 |
7 |
modified |
7.4 KB |
2025-12-28 02:24 |
| 1948 |
6 |
modified |
7.7 KB |
2025-12-28 02:23 |
| 1400 |
5 |
modified |
7.6 KB |
2025-12-25 16:58 |
| 1385 |
4 |
modified |
7.9 KB |
2025-12-25 16:57 |
| 1381 |
3 |
modified |
9.2 KB |
2025-12-25 16:57 |
| 1372 |
2 |
modified |
9.4 KB |
2025-12-25 16:56 |
| 810 |
1 |
modified |
9.3 KB |
2025-12-23 08:08 |
← Zurück zur Übersicht