Backup #1410

ID1410
Dateipfad/var/www/dev.campus.systemische-tools.de/src/Domain/Entity/TaskResultBuilder.php
Version2
Typ modified
Größe3.4 KB
Hashd6188958fd7d5ea56c498a6c29f26228d2551f7e2b927a794fd97ba2709a6b4d
Datum2025-12-25 16:58:40
Geändert vonclaude-code-hook
GrundClaude Code Pre-Hook Backup vor Edit-Operation
Datei existiert Ja

Dateiinhalt

<?php

declare(strict_types=1);

namespace Domain\Entity;

// @responsibility: Builder für TaskResult-Entity (optionale Felder, Validierung)

use Domain\Entity\TaskResult;
use Domain\ValueObject\AssigneeType;
use Domain\ValueObject\ExecutionDuration;
use Domain\ValueObject\ExecutionMetrics;
use Domain\ValueObject\ResultStatus;
use Domain\ValueObject\TokenCount;

final class TaskResultBuilder
{
    private int $taskId;
    private ?int $assignmentId = null;
    private string $executor;
    private AssigneeType $executorType;
    private ?string $modelName = null;
    private ?string $request = null;
    private ?string $response = null;
    private ExecutionDuration $duration;
    private ExecutionMetrics $metrics;
    private ResultStatus $status = ResultStatus::SUCCESS;
    private ?string $errorMessage = null;

    public function __construct(int $taskId, string $executor, AssigneeType $executorType)
    {
        $this->taskId = $taskId;
        $this->executor = $executor;
        $this->executorType = $executorType;
        $this->duration = ExecutionDuration::now();
        $this->metrics = ExecutionMetrics::zero();
    }

    public static function for(int $taskId, string $executor, AssigneeType $executorType): self
    {
        return new self($taskId, $executor, $executorType);
    }

    public function withAssignment(int $assignmentId): self
    {
        $this->assignmentId = $assignmentId;

        return $this;
    }

    public function withModel(string $modelName): self
    {
        $this->modelName = $modelName;

        return $this;
    }

    public function withRequest(string $request): self
    {
        $this->request = $request;

        return $this;
    }

    public function withResponse(string $response): self
    {
        $this->response = $response;
        $this->duration = $this->duration->completeNow();

        return $this;
    }

    public function withDuration(ExecutionDuration $duration): self
    {
        $this->duration = $duration;

        return $this;
    }

    public function withMetrics(ExecutionMetrics $metrics): self
    {
        $this->metrics = $metrics;

        return $this;
    }

    public function withTokens(int $input, int $output): self
    {
        $this->metrics = $this->metrics->withTokens(TokenCount::create($input, $output));

        return $this;
    }

    public function withCost(float $costUsd): self
    {
        $this->metrics = $this->metrics->withCost($costUsd);

        return $this;
    }

    public function withStatus(ResultStatus $status): self
    {
        $this->status = $status;

        return $this;
    }

    public function withError(string $errorMessage): self
    {
        $this->errorMessage = $errorMessage;
        $this->status = ResultStatus::ERROR;

        return $this;
    }

    public function estimateTokens(): self
    {
        if ($this->request !== null && $this->response !== null) {
            $this->metrics = ExecutionMetrics::fromEstimation($this->request, $this->response);
        }

        return $this;
    }

    public function build(): TaskResult
    {
        return new TaskResult(
            $this->taskId,
            $this->assignmentId,
            $this->executor,
            $this->executorType,
            $this->modelName,
            $this->request,
            $this->response,
            $this->duration,
            $this->metrics,
            $this->status,
            $this->errorMessage
        );
    }
}

Vollständig herunterladen

Aktionen

Herunterladen

Andere Versionen dieser Datei

ID Version Typ Größe Datum
1410 2 modified 3.4 KB 2025-12-25 16:58
1401 1 modified 3.4 KB 2025-12-25 16:58

← Zurück zur Übersicht