TaskResultRepository.php
- Pfad:
src/Infrastructure/Persistence/TaskResultRepository.php - Namespace: Infrastructure\Persistence
- Zeilen: 141 | Größe: 4,606 Bytes
- Geändert: 2025-12-25 12:51:02 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 100
- Dependencies: 100 (25%)
- LOC: 100 (20%)
- Methods: 100 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Keine Issues gefunden.
Dependencies 4
- implements Domain\Repository\TaskResultRepositoryInterface
- constructor PDO
- use Domain\Entity\TaskResult
- use Domain\Repository\TaskResultRepositoryInterface
Klassen 1
-
TaskResultRepositoryclass Zeile 12
Funktionen 7
-
__construct()public Zeile 16 -
find()public Zeile 21 -
findByTaskId()public Zeile 30 -
findByAssignmentId()public Zeile 45 -
save()public Zeile 60 -
getTokenStatistics()public Zeile 100 -
getModelUsage()Zeile 122
Verwendet von 5
- GetTasksUseCase.php constructor
- GetTasksUseCase.php use
- SaveTaskResultUseCase.php constructor
- SaveTaskResultUseCase.php use
- TaskServiceProvider.php use
Versionen 5
-
v5
2025-12-25 12:51 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v4
2025-12-25 10:32 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v3
2025-12-25 10:32 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v2
2025-12-23 08:04 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v1
2025-12-22 10:11 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
Code
<?php
declare(strict_types=1);
namespace Infrastructure\Persistence;
// @responsibility: Persistenz für Task-Ergebnisse (AI-Responses, Token-Usage)
use Domain\Entity\TaskResult;
use Domain\Repository\TaskResultRepositoryInterface;
class TaskResultRepository implements TaskResultRepositoryInterface
{
private \PDO $pdo;
public function __construct(\PDO $pdo)
{
$this->pdo = $pdo;
}
public function find(int $id): ?TaskResult
{
$stmt = $this->pdo->prepare('SELECT * FROM task_results WHERE id = :id');
$stmt->execute(['id' => $id]);
$row = $stmt->fetch();
return $row !== false ? TaskResult::fromArray($row) : null;
}
public function findByTaskId(int $taskId): array
{
$stmt = $this->pdo->prepare(
'SELECT * FROM task_results WHERE task_id = :task_id ORDER BY created_at DESC'
);
$stmt->execute(['task_id' => $taskId]);
$results = [];
while ($row = $stmt->fetch()) {
$results[] = TaskResult::fromArray($row);
}
return $results;
}
public function findByAssignmentId(int $assignmentId): array
{
$stmt = $this->pdo->prepare(
'SELECT * FROM task_results WHERE assignment_id = :assignment_id ORDER BY created_at DESC'
);
$stmt->execute(['assignment_id' => $assignmentId]);
$results = [];
while ($row = $stmt->fetch()) {
$results[] = TaskResult::fromArray($row);
}
return $results;
}
public function save(TaskResult $result): int
{
$sql = 'INSERT INTO task_results (
task_id, assignment_id, executor, executor_type, model_name,
request, response, request_timestamp, response_timestamp,
duration_ms, tokens_input, tokens_output, tokens_total,
cost_usd, status, error_message, created_at
) VALUES (
:task_id, :assignment_id, :executor, :executor_type, :model_name,
:request, :response, :request_timestamp, :response_timestamp,
:duration_ms, :tokens_input, :tokens_output, :tokens_total,
:cost_usd, :status, :error_message, :created_at
)';
$stmt = $this->pdo->prepare($sql);
$data = $result->toArray();
$stmt->execute([
'task_id' => $data['task_id'],
'assignment_id' => $data['assignment_id'],
'executor' => $data['executor'],
'executor_type' => $data['executor_type'],
'model_name' => $data['model_name'],
'request' => $data['request'],
'response' => $data['response'],
'request_timestamp' => $data['request_timestamp'],
'response_timestamp' => $data['response_timestamp'],
'duration_ms' => $data['duration_ms'],
'tokens_input' => $data['tokens_input'],
'tokens_output' => $data['tokens_output'],
'tokens_total' => $data['tokens_total'],
'cost_usd' => $data['cost_usd'],
'status' => $data['status'],
'error_message' => $data['error_message'],
'created_at' => $data['created_at'],
]);
return (int) $this->pdo->lastInsertId();
}
public function getTokenStatistics(?int $taskId = null): array
{
$where = $taskId !== null ? 'WHERE task_id = :task_id' : '';
$params = $taskId !== null ? ['task_id' => $taskId] : [];
$sql = "SELECT
COUNT(*) as total_results,
SUM(tokens_input) as total_tokens_input,
SUM(tokens_output) as total_tokens_output,
SUM(tokens_total) as total_tokens,
SUM(cost_usd) as total_cost,
AVG(duration_ms) as avg_duration_ms,
SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) as successful,
SUM(CASE WHEN status = 'error' THEN 1 ELSE 0 END) as failed
FROM task_results {$where}";
$stmt = $this->pdo->prepare($sql);
$stmt->execute($params);
return $stmt->fetch();
}
public function getModelUsage(): array
{
$sql = 'SELECT
model_name,
executor_type,
COUNT(*) as usage_count,
SUM(tokens_total) as total_tokens,
SUM(cost_usd) as total_cost,
AVG(duration_ms) as avg_duration
FROM task_results
WHERE model_name IS NOT NULL
GROUP BY model_name, executor_type
ORDER BY usage_count DESC';
$stmt = $this->pdo->query($sql);
return $stmt->fetchAll();
}
}