DokumentExplorerRepository.php
- Pfad:
src/Infrastructure/Persistence/DokumentExplorerRepository.php - Namespace: Infrastructure\Persistence
- Zeilen: 102 | Größe: 3,173 Bytes
- Geändert: 2025-12-25 12:29: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\DokumentExplorerRepositoryInterface
- constructor PDO
- use Domain\Repository\DokumentExplorerRepositoryInterface
- use PDO
Klassen 1
-
DokumentExplorerRepositoryclass Zeile 12
Funktionen 7
-
__construct()public Zeile 16 -
countDokumente()public Zeile 21 -
getDokumenteWithStats()public Zeile 31 -
getDokumenteWithFullStats()public Zeile 46 -
getDokument()public Zeile 64 -
getDokumentRoot()public Zeile 81 -
getDokumenteForFilter()public Zeile 95
Verwendet von 1
Code
<?php
declare(strict_types=1);
namespace Infrastructure\Persistence;
use Domain\Repository\DokumentExplorerRepositoryInterface;
use PDO;
// @responsibility: Persistenz für Dokument-Explorer (Root-Dokumente mit Stats)
class DokumentExplorerRepository implements DokumentExplorerRepositoryInterface
{
private PDO $pdo;
public function __construct(PDO $pdo)
{
$this->pdo = $pdo;
}
public function countDokumente(): int
{
return (int) $this->pdo->query(
'SELECT COUNT(*) FROM dokumentation WHERE depth = 0'
)->fetchColumn();
}
/**
* @return array<array<string, mixed>>
*/
public function getDokumenteWithStats(): array
{
return $this->pdo->query(
'SELECT d.id, d.title, d.path,
(SELECT COUNT(*) FROM dokumentation WHERE parent_id = d.id) as seiten_count,
(SELECT COUNT(*) FROM dokumentation_chunks WHERE dokumentation_id = d.id) as chunks_count
FROM dokumentation d
WHERE d.depth = 0
ORDER BY d.title'
)->fetchAll(PDO::FETCH_ASSOC);
}
/**
* @return array<array<string, mixed>>
*/
public function getDokumenteWithFullStats(): array
{
return $this->pdo->query(
'SELECT d.id, d.title, d.path, d.content, d.created_at, d.updated_at,
(SELECT COUNT(*) FROM dokumentation WHERE parent_id = d.id) as seiten_count,
(SELECT COUNT(*) FROM dokumentation_chunks WHERE dokumentation_id IN
(SELECT id FROM dokumentation WHERE parent_id = d.id OR id = d.id)) as total_chunks,
(SELECT COALESCE(SUM(token_count), 0) FROM dokumentation_chunks WHERE dokumentation_id IN
(SELECT id FROM dokumentation WHERE parent_id = d.id OR id = d.id)) as total_tokens
FROM dokumentation d
WHERE d.depth = 0
ORDER BY d.title'
)->fetchAll(PDO::FETCH_ASSOC);
}
/**
* @return array<string, mixed>|null
*/
public function getDokument(int $id): ?array
{
$stmt = $this->pdo->prepare(
'SELECT d.*, p.title as parent_title
FROM dokumentation d
LEFT JOIN dokumentation p ON d.parent_id = p.id
WHERE d.id = :id'
);
$stmt->execute(['id' => $id]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
return $result !== false ? $result : null;
}
/**
* @return array<string, mixed>|null
*/
public function getDokumentRoot(int $id): ?array
{
$stmt = $this->pdo->prepare(
'SELECT * FROM dokumentation WHERE id = :id AND depth = 0'
);
$stmt->execute(['id' => $id]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
return $result !== false ? $result : null;
}
/**
* @return array<array<string, mixed>>
*/
public function getDokumenteForFilter(): array
{
return $this->pdo->query(
'SELECT id, title FROM dokumentation WHERE depth = 0 ORDER BY title'
)->fetchAll(PDO::FETCH_ASSOC);
}
}