PromptsRepository.php
- Pfad:
src/Infrastructure/Persistence/PromptsRepository.php - Namespace: Infrastructure\Persistence
- Zeilen: 128 | Größe: 3,892 Bytes
- Geändert: 2025-12-30 22:28:28 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 98
- Dependencies: 100 (25%)
- LOC: 100 (20%)
- Methods: 90 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Keine Issues gefunden.
Dependencies 3
- implements Domain\Repository\PromptsRepositoryInterface
- constructor PDO
- use Domain\Repository\PromptsRepositoryInterface
Klassen 1
-
PromptsRepositoryclass Zeile 11
Funktionen 11
-
__construct()public Zeile 15 -
findById()public Zeile 20 -
findAll()public Zeile 29 -
findActivePrompts()public Zeile 41 -
create()public Zeile 53 -
update()public Zeile 64 -
delete()public Zeile 74 -
duplicate()public Zeile 80 -
findLinkedCritics()Zeile 96 -
countLinkedCritics()Zeile 104 -
getStatistics()Zeile 112
Verwendet von 3
- ChatServiceProvider.php use
- ManagePromptsUseCase.php constructor
- ManagePromptsUseCase.php use
Versionen 7
-
v7
2025-12-30 22:28 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v6
2025-12-30 22:28 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v5
2025-12-30 22:27 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v4
2025-12-25 12:51 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v3
2025-12-25 10:34 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v2
2025-12-25 10:32 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v1
2025-12-23 08:04 | 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 Prompt-Templates
use Domain\Repository\PromptsRepositoryInterface;
class PromptsRepository implements PromptsRepositoryInterface
{
private \PDO $pdo;
public function __construct(\PDO $pdo)
{
$this->pdo = $pdo;
}
public function findById(int $id): ?array
{
$stmt = $this->pdo->prepare('SELECT * FROM prompts WHERE id = ?');
$stmt->execute([$id]);
$result = $stmt->fetch(\PDO::FETCH_ASSOC);
return $result !== false ? $result : null;
}
public function findAll(): array
{
$stmt = $this->pdo->query("
SELECT p.*,
(SELECT COUNT(*) FROM content_config c WHERE c.type = 'critic' AND c.prompt_id = p.id) as critic_count
FROM prompts p
ORDER BY p.name
");
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
public function findActivePrompts(): array
{
$stmt = $this->pdo->query('
SELECT id, name, version
FROM prompts
WHERE is_active = 1
ORDER BY name
');
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
public function create(string $name, string $version, string $content, int $isActive): int
{
$stmt = $this->pdo->prepare('
INSERT INTO prompts (name, version, content, is_active)
VALUES (?, ?, ?, ?)
');
$stmt->execute([$name, $version, $content, $isActive]);
return (int) $this->pdo->lastInsertId();
}
public function update(int $id, string $name, string $version, string $content, int $isActive): void
{
$stmt = $this->pdo->prepare('
UPDATE prompts
SET name = ?, version = ?, content = ?, is_active = ?
WHERE id = ?
');
$stmt->execute([$name, $version, $content, $isActive, $id]);
}
public function delete(int $id): void
{
$stmt = $this->pdo->prepare('DELETE FROM prompts WHERE id = ?');
$stmt->execute([$id]);
}
public function duplicate(int $id, string $newName, string $newVersion): int
{
$original = $this->findById($id);
if ($original === null) {
throw new \RuntimeException("Prompt {$id} not found");
}
$stmt = $this->pdo->prepare('
INSERT INTO prompts (name, version, content, is_active)
VALUES (?, ?, ?, 0)
');
$stmt->execute([$newName, $newVersion, $original['content']]);
return (int) $this->pdo->lastInsertId();
}
public function findLinkedCritics(int $promptId): array
{
$stmt = $this->pdo->prepare("SELECT * FROM content_config WHERE type = 'critic' AND prompt_id = ? ORDER BY name");
$stmt->execute([$promptId]);
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
public function countLinkedCritics(int $promptId): int
{
$stmt = $this->pdo->prepare("SELECT COUNT(*) FROM content_config WHERE type = 'critic' AND prompt_id = ?");
$stmt->execute([$promptId]);
return (int) $stmt->fetchColumn();
}
public function getStatistics(): array
{
$stats = ['total' => 0, 'active' => 0, 'inactive' => 0, 'linked_to_critics' => 0];
$stmt = $this->pdo->query('SELECT COUNT(*) as cnt, SUM(is_active) as active FROM prompts');
$row = $stmt->fetch(\PDO::FETCH_ASSOC);
$stats['total'] = (int) $row['cnt'];
$stats['active'] = (int) $row['active'];
$stats['inactive'] = $stats['total'] - $stats['active'];
$stmt = $this->pdo->query("SELECT COUNT(DISTINCT prompt_id) FROM content_config WHERE type = 'critic' AND prompt_id IS NOT NULL");
$stats['linked_to_critics'] = (int) $stmt->fetchColumn();
return $stats;
}
}