Backup #1385
| ID | 1385 |
| Dateipfad | /var/www/dev.campus.systemische-tools.de/src/Domain/Entity/TaskResult.php |
| Version | 4 |
| Typ |
modified |
| Größe | 7.9 KB |
| Hash | d2b5930a6e70c5f669ede02dbb04c470625d236bb072944887b6f98579d30542 |
| Datum | 2025-12-25 16:57:24 |
| 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;
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;
}
public function toArray(): array
{
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' => $this->requestTimestamp->format('Y-m-d H:i:s.u'),
'response_timestamp' => $this->responseTimestamp?->format('Y-m-d H:i:s.u'),
'duration_ms' => $this->durationMs,
'tokens_input' => $this->tokensInput,
'tokens_output' => $this->tokensOutput,
'tokens_total' => $this->tokensTotal,
'cost_usd' => $this->costUsd,
'status' => $this->status,
'error_message' => $this->errorMessage,
'created_at' => $this->createdAt->format('Y-m-d H:i:s.u'),
];
}
public static function fromArray(array $data): self
{
$result = new self();
if (isset($data['id'])) {
$result->setId((int) $data['id']);
}
if (isset($data['task_id'])) {
$result->setTaskId((int) $data['task_id']);
}
if (isset($data['assignment_id'])) {
$result->setAssignmentId((int) $data['assignment_id']);
}
if (isset($data['executor'])) {
$result->setExecutor($data['executor']);
}
if (isset($data['executor_type'])) {
$result->executorType = AssigneeType::from($data['executor_type']);
}
if (isset($data['model_name'])) {
$result->setModelName($data['model_name']);
}
if (isset($data['request'])) {
$result->request = $data['request'];
}
if (isset($data['response'])) {
$result->response = $data['response'];
}
if (isset($data['request_timestamp'])) {
$result->setRequestTimestamp(new \DateTimeImmutable($data['request_timestamp']));
}
if (isset($data['response_timestamp'])) {
$result->setResponseTimestamp(new \DateTimeImmutable($data['response_timestamp']));
}
if (isset($data['duration_ms'])) {
$result->setDurationMs((int) $data['duration_ms']);
}
if (isset($data['tokens_input'])) {
$result->tokensInput = (int) $data['tokens_input'];
}
if (isset($data['tokens_output'])) {
$result->tokensOutput = (int) $data['tokens_output'];
}
if (isset($data['tokens_total'])) {
$result->tokensTotal = (int) $data['tokens_total'];
}
if (isset($data['cost_usd'])) {
$result->setCostUsd((float) $data['cost_usd']);
}
if (isset($data['status'])) {
$result->status = $data['status'];
}
if (isset($data['error_message'])) {
$result->errorMessage = $data['error_message'];
}
if (isset($data['created_at'])) {
$result->setCreatedAt(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