{
"tool_response": {
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Domain\/Entity\/TaskResult.php",
"oldString": " \/\/ Setter only for infrastructure (persistence)\n public function setId(int $id): void\n {\n $this->id = $id;\n }\n\n \/\/ Domain Logic\n public function isSuccess(): bool\n {\n return $this->status === ResultStatus::SUCCESS;\n }\n\n public function hasError(): bool\n {\n return $this->status === ResultStatus::ERROR;\n }\n\n public function hasModel(): bool\n {\n return $this->modelName !== null;\n }\n\n public function summary(): string\n {\n $parts = [\n $this->executor,\n $this->status->label(),\n ];\n\n if ($this->modelName !== null) {\n $parts[] = \"({$this->modelName})\";\n }\n\n return implode(' - ', $parts);\n }\n\n \/\/ Legacy getters for backward compatibility (deprecated)\n public function getId(): ?int\n {\n return $this->id;\n }\n\n public function getTaskId(): int\n {\n return $this->taskId;\n }\n\n public function getAssignmentId(): ?int\n {\n return $this->assignmentId;\n }\n\n public function getExecutor(): string\n {\n return $this->executor;\n }\n\n public function getExecutorType(): AssigneeType\n {\n return $this->executorType;\n }\n\n public function getModelName(): ?string\n {\n return $this->modelName;\n }\n\n public function getRequest(): ?string\n {\n return $this->request;\n }\n\n public function getResponse(): ?string\n {\n return $this->response;\n }\n\n public function getRequestTimestamp(): \\DateTimeImmutable\n {\n return $this->duration->requestedAt();\n }\n\n public function getResponseTimestamp(): ?\\DateTimeImmutable\n {\n return $this->duration->respondedAt();\n }\n\n public function getDurationMs(): ?int\n {\n return $this->duration->durationMs();\n }\n\n public function getTokensInput(): ?int\n {\n return $this->metrics->tokens()->input();\n }\n\n public function getTokensOutput(): ?int\n {\n return $this->metrics->tokens()->output();\n }\n\n public function getTokensTotal(): ?int\n {\n return $this->metrics->tokens()->total();\n }\n\n public function getCostUsd(): ?float\n {\n return $this->metrics->costUsd();\n }\n\n public function getStatus(): string\n {\n return $this->status->value;\n }\n\n public function getErrorMessage(): ?string\n {\n return $this->errorMessage;\n }\n\n public function getCreatedAt(): \\DateTimeImmutable\n {\n return $this->createdAt;\n }",
"newString": " \/\/ Setter only for infrastructure (persistence)\n public function setId(int $id): void { $this->id = $id; }\n\n \/\/ Domain Logic\n public function isSuccess(): bool { return $this->status === ResultStatus::SUCCESS; }\n public function hasError(): bool { return $this->status === ResultStatus::ERROR; }\n public function hasModel(): bool { return $this->modelName !== null; }\n\n public function summary(): string\n {\n $parts = [$this->executor, $this->status->label()];\n if ($this->modelName !== null) {\n $parts[] = \"({$this->modelName})\";\n }\n return implode(' - ', $parts);\n }\n\n \/\/ Legacy getters for backward compatibility (deprecated)\n public function getId(): ?int { return $this->id; }\n public function getTaskId(): int { return $this->taskId; }\n public function getAssignmentId(): ?int { return $this->assignmentId; }\n public function getExecutor(): string { return $this->executor; }\n public function getExecutorType(): AssigneeType { return $this->executorType; }\n public function getModelName(): ?string { return $this->modelName; }\n public function getRequest(): ?string { return $this->request; }\n public function getResponse(): ?string { return $this->response; }\n public function getRequestTimestamp(): \\DateTimeImmutable { return $this->duration->requestedAt(); }\n public function getResponseTimestamp(): ?\\DateTimeImmutable { return $this->duration->respondedAt(); }\n public function getDurationMs(): ?int { return $this->duration->durationMs(); }\n public function getTokensInput(): ?int { return $this->metrics->tokens()->input(); }\n public function getTokensOutput(): ?int { return $this->metrics->tokens()->output(); }\n public function getTokensTotal(): ?int { return $this->metrics->tokens()->total(); }\n public function getCostUsd(): ?float { return $this->metrics->costUsd(); }\n public function getStatus(): string { return $this->status->value; }\n public function getErrorMessage(): ?string { return $this->errorMessage; }\n public function getCreatedAt(): \\DateTimeImmutable { return $this->createdAt; }",
"originalFile": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Domain\\Entity;\n\n\/\/ @responsibility: Task-Ergebnis-Entität mit Rich Domain Logic\n\nuse Domain\\ValueObject\\AssigneeType;\nuse Domain\\ValueObject\\ExecutionDuration;\nuse Domain\\ValueObject\\ExecutionMetrics;\nuse Domain\\ValueObject\\ResultStatus;\nuse Domain\\ValueObject\\TokenCount;\n\nclass TaskResult\n{\n private ?int $id = null;\n private \\DateTimeImmutable $createdAt;\n\n public function __construct(\n private int $taskId,\n private ?int $assignmentId,\n private string $executor,\n private AssigneeType $executorType,\n private ?string $modelName,\n private ?string $request,\n private ?string $response,\n private ExecutionDuration $duration,\n private ExecutionMetrics $metrics,\n private ResultStatus $status,\n private ?string $errorMessage\n ) {\n $this->createdAt = new \\DateTimeImmutable();\n }\n\n \/\/ Factory Methods\n public static function builder(int $taskId, string $executor, AssigneeType $executorType): TaskResultBuilder\n {\n return new TaskResultBuilder($taskId, $executor, $executorType);\n }\n\n \/\/ Getters - Only for necessary access\n public function id(): ?int { return $this->id; }\n public function taskId(): int { return $this->taskId; }\n public function assignmentId(): ?int { return $this->assignmentId; }\n public function executor(): string { return $this->executor; }\n public function executorType(): AssigneeType { return $this->executorType; }\n public function modelName(): ?string { return $this->modelName; }\n public function request(): ?string { return $this->request; }\n public function response(): ?string { return $this->response; }\n public function duration(): ExecutionDuration { return $this->duration; }\n public function metrics(): ExecutionMetrics { return $this->metrics; }\n public function status(): ResultStatus { return $this->status; }\n public function errorMessage(): ?string { return $this->errorMessage; }\n public function createdAt(): \\DateTimeImmutable { return $this->createdAt; }\n\n \/\/ Setter only for infrastructure (persistence)\n public function setId(int $id): void\n {\n $this->id = $id;\n }\n\n \/\/ Domain Logic\n public function isSuccess(): bool\n {\n return $this->status === ResultStatus::SUCCESS;\n }\n\n public function hasError(): bool\n {\n return $this->status === ResultStatus::ERROR;\n }\n\n public function hasModel(): bool\n {\n return $this->modelName !== null;\n }\n\n public function summary(): string\n {\n $parts = [\n $this->executor,\n $this->status->label(),\n ];\n\n if ($this->modelName !== null) {\n $parts[] = \"({$this->modelName})\";\n }\n\n return implode(' - ', $parts);\n }\n\n \/\/ Legacy getters for backward compatibility (deprecated)\n public function getId(): ?int\n {\n return $this->id;\n }\n\n public function getTaskId(): int\n {\n return $this->taskId;\n }\n\n public function getAssignmentId(): ?int\n {\n return $this->assignmentId;\n }\n\n public function getExecutor(): string\n {\n return $this->executor;\n }\n\n public function getExecutorType(): AssigneeType\n {\n return $this->executorType;\n }\n\n public function getModelName(): ?string\n {\n return $this->modelName;\n }\n\n public function getRequest(): ?string\n {\n return $this->request;\n }\n\n public function getResponse(): ?string\n {\n return $this->response;\n }\n\n public function getRequestTimestamp(): \\DateTimeImmutable\n {\n return $this->duration->requestedAt();\n }\n\n public function getResponseTimestamp(): ?\\DateTimeImmutable\n {\n return $this->duration->respondedAt();\n }\n\n public function getDurationMs(): ?int\n {\n return $this->duration->durationMs();\n }\n\n public function getTokensInput(): ?int\n {\n return $this->metrics->tokens()->input();\n }\n\n public function getTokensOutput(): ?int\n {\n return $this->metrics->tokens()->output();\n }\n\n public function getTokensTotal(): ?int\n {\n return $this->metrics->tokens()->total();\n }\n\n public function getCostUsd(): ?float\n {\n return $this->metrics->costUsd();\n }\n\n public function getStatus(): string\n {\n return $this->status->value;\n }\n\n public function getErrorMessage(): ?string\n {\n return $this->errorMessage;\n }\n\n public function getCreatedAt(): \\DateTimeImmutable\n {\n return $this->createdAt;\n }\n\n \/\/ Serialization\n public function toArray(): array\n {\n $durationData = $this->duration->toArray();\n $metricsData = $this->metrics->toArray();\n\n return [\n 'id' => $this->id,\n 'task_id' => $this->taskId,\n 'assignment_id' => $this->assignmentId,\n 'executor' => $this->executor,\n 'executor_type' => $this->executorType->value,\n 'model_name' => $this->modelName,\n 'request' => $this->request,\n 'response' => $this->response,\n 'request_timestamp' => $durationData['requested_at'],\n 'response_timestamp' => $durationData['responded_at'],\n 'duration_ms' => $durationData['duration_ms'],\n 'tokens_input' => $metricsData['tokens_input'],\n 'tokens_output' => $metricsData['tokens_output'],\n 'tokens_total' => $metricsData['tokens_total'],\n 'cost_usd' => $metricsData['cost_usd'],\n 'status' => $this->status->value,\n 'error_message' => $this->errorMessage,\n 'created_at' => $this->createdAt->format('Y-m-d H:i:s.u'),\n ];\n }\n\n public static function fromArray(array $data): self\n {\n $executorType = AssigneeType::from($data['executor_type']);\n $status = isset($data['status']) ? ResultStatus::from($data['status']) : ResultStatus::SUCCESS;\n\n $requestTimestamp = isset($data['request_timestamp'])\n ? new \\DateTimeImmutable($data['request_timestamp'])\n : new \\DateTimeImmutable();\n\n $responseTimestamp = isset($data['response_timestamp'])\n ? new \\DateTimeImmutable($data['response_timestamp'])\n : null;\n\n $duration = $responseTimestamp !== null\n ? ExecutionDuration::completed($requestTimestamp, $responseTimestamp)\n : ExecutionDuration::start($requestTimestamp);\n\n $tokens = TokenCount::fromNullable(\n $data['tokens_input'] ?? null,\n $data['tokens_output'] ?? null\n );\n\n $metrics = ExecutionMetrics::create(\n $tokens,\n isset($data['cost_usd']) ? (float) $data['cost_usd'] : null,\n isset($data['duration_ms']) ? (int) $data['duration_ms'] : null\n );\n\n $result = new self(\n (int) $data['task_id'],\n isset($data['assignment_id']) ? (int) $data['assignment_id'] : null,\n $data['executor'],\n $executorType,\n $data['model_name'] ?? null,\n $data['request'] ?? null,\n $data['response'] ?? null,\n $duration,\n $metrics,\n $status,\n $data['error_message'] ?? null\n );\n\n if (isset($data['id'])) {\n $result->setId((int) $data['id']);\n }\n\n if (isset($data['created_at'])) {\n $result->createdAt = new \\DateTimeImmutable($data['created_at']);\n }\n\n return $result;\n }\n}\n",
"structuredPatch": [
{
"oldStart": 55,
"oldLines": 132,
"newStart": 55,
"newLines": 42,
"lines": [
" public function createdAt(): \\DateTimeImmutable { return $this->createdAt; }",
" ",
" \/\/ Setter only for infrastructure (persistence)",
"- public function setId(int $id): void",
"- {",
"- $this->id = $id;",
"- }",
"+ public function setId(int $id): void { $this->id = $id; }",
" ",
" \/\/ Domain Logic",
"- public function isSuccess(): bool",
"- {",
"- return $this->status === ResultStatus::SUCCESS;",
"- }",
"+ 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 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(),",
"- ];",
"-",
"+ $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 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 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",
" {"
]
}
],
"userModified": false,
"replaceAll": false
}
}