CodeQualityRepository.php
- Pfad:
src/Infrastructure/Persistence/CodeQualityRepository.php - Namespace: Infrastructure\Persistence
- Zeilen: 135 | Größe: 4,241 Bytes
- Geändert: 2025-12-27 23:52:12 | 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 5
- implements Domain\Repository\CodeQualityRepositoryInterface
- constructor PDO
- use Domain\Constants
- use Domain\Repository\CodeQualityRepositoryInterface
- use PDO
Klassen 1
-
CodeQualityRepositoryclass Zeile 13
Funktionen 4
-
__construct()public Zeile 17 -
saveQuality()public Zeile 27 -
findAllWithQuality()public Zeile 59 -
getQualityStats()public Zeile 119
Verwendet von 1
Versionen 7
-
v7
2025-12-27 23:52 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v6
2025-12-27 23:51 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v5
2025-12-25 16:25 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v4
2025-12-25 16:25 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v3
2025-12-25 16:25 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v2
2025-12-25 16:25 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v1
2025-12-25 16:15 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Write-Operation
Code
<?php
declare(strict_types=1);
namespace Infrastructure\Persistence;
// @responsibility: Persistenz für Code-Hygiene-Metriken (code_quality Tabelle)
use Domain\Constants;
use Domain\Repository\CodeQualityRepositoryInterface;
use PDO;
class CodeQualityRepository implements CodeQualityRepositoryInterface
{
private PDO $pdo;
public function __construct(PDO $pdo)
{
$this->pdo = $pdo;
}
/**
* Speichert Hygiene-Daten für eine Analyse.
*
* @param array<string, mixed> $qualityData
*/
public function saveQuality(int $analysisId, array $qualityData): void
{
// Delete existing quality data
$this->pdo->prepare('DELETE FROM code_quality WHERE analysis_id = ?')->execute([$analysisId]);
$stmt = $this->pdo->prepare('
INSERT INTO code_quality (
analysis_id, dependency_score, hygiene_score,
factor_scores, hardcoded_count, issues_count, warnings_count, issues_json
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
');
$factorScores = $qualityData['factor_scores'] ?? [];
$stmt->execute([
$analysisId,
$factorScores['dependencies'] ?? 0,
$qualityData['hygiene_score'] ?? 50,
json_encode($factorScores),
$qualityData['hardcoded_count'] ?? 0,
$qualityData['issues_count'] ?? 0,
$qualityData['warnings_count'] ?? 0,
$qualityData['issues_json'] ?? '[]',
]);
}
/**
* Holt alle Analysen mit Hygiene-Daten.
*
* @param array<string, mixed> $filters
* @return array<array<string, mixed>>
*/
public function findAllWithQuality(array $filters = [], int $limit = Constants::DEFAULT_LIMIT, int $offset = 0): array
{
$sql = '
SELECT ca.*,
cq.dependency_score, cq.hygiene_score,
cq.factor_scores, cq.hardcoded_count, cq.issues_count,
cq.warnings_count, cq.issues_json
FROM code_analysis ca
LEFT JOIN code_quality cq ON ca.id = cq.analysis_id
WHERE 1=1
';
$params = [];
if (!empty($filters['extension'])) {
$sql .= ' AND ca.extension = :extension';
$params['extension'] = $filters['extension'];
}
if (!empty($filters['namespace'])) {
$sql .= ' AND ca.namespace = :namespace';
$params['namespace'] = $filters['namespace'];
}
if (!empty($filters['search'])) {
$sql .= ' AND (ca.file_name LIKE :search OR ca.namespace LIKE :search)';
$params['search'] = '%' . $filters['search'] . '%';
}
if (!empty($filters['has_issues'])) {
$sql .= ' AND cq.issues_count > 0';
}
if (!empty($filters['min_score'])) {
$sql .= ' AND cq.hygiene_score >= :min_score';
$params['min_score'] = (int) $filters['min_score'];
}
if (!empty($filters['max_score'])) {
$sql .= ' AND cq.hygiene_score <= :max_score';
$params['max_score'] = (int) $filters['max_score'];
}
$sql .= ' ORDER BY ca.namespace, ca.file_name LIMIT :limit OFFSET :offset';
$stmt = $this->pdo->prepare($sql);
foreach ($params as $key => $value) {
$stmt->bindValue(':' . $key, $value);
}
$stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
/**
* Holt Hygiene-Statistiken.
*
* @return array<string, mixed>
*/
public function getQualityStats(): array
{
$stmt = $this->pdo->query('
SELECT
COUNT(*) as total_files,
SUM(issues_count) as total_issues,
SUM(hardcoded_count) as total_hardcoded,
AVG(hygiene_score) as avg_hygiene_score,
MIN(hygiene_score) as min_hygiene_score,
MAX(hygiene_score) as max_hygiene_score
FROM code_quality
');
return $stmt->fetch(PDO::FETCH_ASSOC) ?: [];
}
}