DocumentRepository.php
- Pfad:
src/Infrastructure/Persistence/DocumentRepository.php - Namespace: Infrastructure\Persistence
- Zeilen: 95 | Größe: 2,709 Bytes
- Geändert: 2025-12-25 10:28:54 | 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\DocumentRepositoryInterface
- constructor PDO
- use Domain\Repository\DocumentRepositoryInterface
- use PDO
Klassen 1
-
DocumentRepositoryclass Zeile 12
Funktionen 5
-
__construct()public Zeile 16 -
getStats()public Zeile 24 -
findAll()public Zeile 40 -
findFiltered()public Zeile 54 -
find()public Zeile 86
Verwendet von 1
Versionen 2
-
v2
2025-12-25 10:28 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v1
2025-12-25 10:28 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
Code
<?php
declare(strict_types=1);
namespace Infrastructure\Persistence;
// @responsibility: CRUD-Operationen für Dokumente im Semantic Explorer
use Domain\Repository\DocumentRepositoryInterface;
use PDO;
final class DocumentRepository implements DocumentRepositoryInterface
{
private PDO $db;
public function __construct(PDO $pdo)
{
$this->db = $pdo;
}
/**
* {@inheritDoc}
*/
public function getStats(): array
{
$result = $this->db->query(
'SELECT
COUNT(*) as total,
SUM(CASE WHEN status = "done" THEN 1 ELSE 0 END) as processed,
SUM(CASE WHEN status = "error" THEN 1 ELSE 0 END) as errors
FROM documents'
)->fetch();
return $result !== false ? $result : ['total' => 0, 'processed' => 0, 'errors' => 0];
}
/**
* {@inheritDoc}
*/
public function findAll(): array
{
return $this->db->query(
'SELECT d.id, d.filename, d.folder_path, d.mime_type, d.file_size,
d.status, d.imported_at, d.processed_at,
(SELECT COUNT(*) FROM chunks WHERE document_id = d.id) as chunk_count
FROM documents d
ORDER BY d.imported_at DESC'
)->fetchAll();
}
/**
* {@inheritDoc}
*/
public function findFiltered(string $status = '', string $search = ''): array
{
$sql = 'SELECT d.id, d.filename, d.folder_path, d.source_path, d.mime_type,
d.file_size, d.status, d.imported_at, d.processed_at, d.error_message,
(SELECT COUNT(*) FROM chunks WHERE document_id = d.id) as chunk_count,
(SELECT COALESCE(SUM(token_count), 0) FROM chunks WHERE document_id = d.id) as token_count
FROM documents d WHERE 1=1';
$params = [];
if ($status !== '') {
$sql .= ' AND d.status = :status';
$params['status'] = $status;
}
if ($search !== '') {
$sql .= ' AND (d.filename LIKE :search OR d.source_path LIKE :search2)';
$params['search'] = '%' . $search . '%';
$params['search2'] = '%' . $search . '%';
}
$sql .= ' ORDER BY d.imported_at DESC';
$stmt = $this->db->prepare($sql);
$stmt->execute($params);
return $stmt->fetchAll();
}
/**
* {@inheritDoc}
*/
public function find(int $id): ?array
{
$stmt = $this->db->prepare('SELECT * FROM documents WHERE id = :id');
$stmt->execute(['id' => $id]);
$result = $stmt->fetch();
return $result === false ? null : $result;
}
}