Backup #711

ID711
Dateipfad/var/www/dev.campus.systemische-tools.de/src/UseCases/Task/SaveTaskResultUseCase.php
Version1
Typ modified
Größe3.9 KB
Hash539fde7c10ba3c5d23f149053a57ac7b351390603b00ac2503ac7b874e21463f
Datum2025-12-23 07:55:04
Geändert vonclaude-code-hook
GrundClaude Code Pre-Hook Backup vor Edit-Operation
Datei existiert Ja

Dateiinhalt

<?php

namespace UseCases\Task;

use Domain\Entity\TaskComment;
use Domain\Entity\TaskResult;
use Domain\ValueObject\AssigneeType;
use Infrastructure\Persistence\TaskCommentRepository;
use Infrastructure\Persistence\TaskRepository;
use Infrastructure\Persistence\TaskResultRepository;

class SaveTaskResultUseCase
{
    private TaskRepository $taskRepository;
    private TaskResultRepository $resultRepository;
    private TaskCommentRepository $commentRepository;

    public function __construct(
        ?TaskRepository $taskRepository = null,
        ?TaskResultRepository $resultRepository = null,
        ?TaskCommentRepository $commentRepository = null
    ) {
        $this->taskRepository = $taskRepository ?? new TaskRepository();
        $this->resultRepository = $resultRepository ?? new TaskResultRepository();
        $this->commentRepository = $commentRepository ?? new TaskCommentRepository();
    }

    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']);

        $result = new TaskResult();
        $result->setTaskId($taskId);
        $result->setExecutor($data['executor']);
        $result->setExecutorType($executorType);

        if (isset($data['assignment_id'])) {
            $result->setAssignmentId((int) $data['assignment_id']);
        }

        if (isset($data['model_name'])) {
            $result->setModelName($data['model_name']);
        }

        if (isset($data['request'])) {
            $result->setRequest($data['request']);
        }

        if (isset($data['response'])) {
            $result->setResponse($data['response']);
        }

        if (isset($data['tokens_input'])) {
            $result->setTokensInput((int) $data['tokens_input']);
        }

        if (isset($data['tokens_output'])) {
            $result->setTokensOutput((int) $data['tokens_output']);
        }

        if (isset($data['duration_ms'])) {
            $result->setDurationMs((int) $data['duration_ms']);
        }

        if (isset($data['cost_usd'])) {
            $result->setCostUsd((float) $data['cost_usd']);
        }

        if (isset($data['error_message'])) {
            $result->setErrorMessage($data['error_message']);
        }

        if (isset($data['status'])) {
            $result->setStatus($data['status']);
        }

        if (!isset($data['tokens_input']) || !isset($data['tokens_output'])) {
            $result->estimateTokens();
        }

        $id = $this->resultRepository->save($result);
        $result->setId($id);

        $status = $result->getStatus() === 'success' ? '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

Herunterladen

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