Backup #2018
| ID | 2018 |
| Dateipfad | /var/www/dev.campus.systemische-tools.de/src/UseCases/Task/SaveTaskResultUseCase.php |
| Version | 4 |
| Typ |
modified |
| Größe | 3.3 KB |
| Hash | a222495d0d821f2692ec5ae5ee798a38c043581f5962eaf5f74af2001829f2db |
| Datum | 2025-12-28 14:25:35 |
| 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 UseCases\Task;
// @responsibility: Speichert Task-Ergebnisse mit Token-Tracking
use Domain\Entity\TaskComment;
use Domain\Entity\TaskResult;
use Domain\Repository\TaskRepositoryInterface;
use Domain\ValueObject\AssigneeType;
use Infrastructure\Persistence\TaskCommentRepository;
use Infrastructure\Persistence\TaskResultRepository;
class SaveTaskResultUseCase
{
public function __construct(
private TaskRepositoryInterface $taskRepository,
private TaskResultRepository $resultRepository,
private TaskCommentRepository $commentRepository
) {
}
public function execute(int $taskId, array $data): TaskResult
{
$this->validate($data);
$task = $this->taskRepository->find($taskId);
if ($task === null) {
throw new \InvalidArgumentException("Task {$taskId} not found");
}
$executorType = AssigneeType::from($data['executor_type']);
$builder = TaskResult::builder($taskId, $data['executor'], $executorType);
if (isset($data['assignment_id'])) {
$builder->withAssignment((int) $data['assignment_id']);
}
if (isset($data['model_name'])) {
$builder->withModel($data['model_name']);
}
if (isset($data['request'])) {
$builder->withRequest($data['request']);
}
if (isset($data['response'])) {
$builder->withResponse($data['response']);
}
if (isset($data['tokens_input'], $data['tokens_output'])) {
$builder->withTokens((int) $data['tokens_input'], (int) $data['tokens_output']);
} else {
$builder->estimateTokens();
}
if (isset($data['cost_usd'])) {
$builder->withCost((float) $data['cost_usd']);
}
if (isset($data['error_message'])) {
$builder->withError($data['error_message']);
} elseif (isset($data['status'])) {
$builder->withStatus(\Domain\ValueObject\ResultStatus::from($data['status']));
}
$result = $builder->build();
$id = $this->resultRepository->save($result);
$result->setId($id);
$status = $result->isSuccess() ? 'erfolgreich' : 'mit Fehler';
$comment = new TaskComment();
$comment->setTaskId($taskId);
$comment->setAuthor($result->getExecutor());
$comment->setAuthorType($executorType->isAI() ? 'ai' : 'human');
$comment->setCommentType('result');
$comment->setContent("Ergebnis gespeichert ({$status})");
$comment->setMetadata([
'result_id' => $id,
'model' => $result->getModelName(),
'tokens_total' => $result->getTokensTotal(),
]);
$this->commentRepository->save($comment);
return $result;
}
private function validate(array $data): void
{
if (!isset($data['executor']) || $data['executor'] === '') {
throw new \InvalidArgumentException('Executor is required');
}
if (!isset($data['executor_type']) || $data['executor_type'] === '') {
throw new \InvalidArgumentException('Executor type is required');
}
try {
AssigneeType::from($data['executor_type']);
} catch (\ValueError $e) {
throw new \InvalidArgumentException('Invalid executor type');
}
}
}
Vollständig herunterladen
Aktionen
Andere Versionen dieser Datei
| ID |
Version |
Typ |
Größe |
Datum |
| 2018 |
4 |
modified |
3.3 KB |
2025-12-28 14:25 |
| 1393 |
3 |
modified |
3.6 KB |
2025-12-25 16:57 |
| 828 |
2 |
modified |
4.0 KB |
2025-12-23 08:15 |
| 711 |
1 |
modified |
3.9 KB |
2025-12-23 07:55 |
← Zurück zur Übersicht