Backup #1329
| ID | 1329 |
| Dateipfad | /var/www/dev.campus.systemische-tools.de/src/Infrastructure/Persistence/CodeQualityRepository.php |
| Version | 3 |
| Typ |
modified |
| Größe | 4.8 KB |
| Hash | 9f3ee7be654ce5c03de4f4dd0b8046ded6023127afbcbb500628b11c18560f7c |
| Datum | 2025-12-25 16:25:49 |
| Geändert von | claude-code-hook |
| Grund | Claude Code Pre-Hook Backup vor Edit-Operation |
| Datei existiert |
Ja
|
Dateiinhalt
<?php
declare(strict_types=1);
namespace Infrastructure\Persistence;
// @responsibility: Persistenz für Code-Hygiene-Metriken (code_quality Tabelle)
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 = 100, int $offset = 0): array
{
$sql = '
SELECT ca.*,
cq.dependency_score, cq.hygiene_score, cq.hygiene_status,
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['hygiene_status'])) {
$sql .= ' AND cq.hygiene_status = :hygiene_status';
$params['hygiene_status'] = $filters['hygiene_status'];
}
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(CASE WHEN hygiene_status = "Sauber" THEN 1 ELSE 0 END) as status_sauber,
SUM(CASE WHEN hygiene_status = "Gepflegt" THEN 1 ELSE 0 END) as status_gepflegt,
SUM(CASE WHEN hygiene_status = "Vernachlässigt" THEN 1 ELSE 0 END) as status_vernachlaessigt,
SUM(CASE WHEN hygiene_status = "Verschmutzt" THEN 1 ELSE 0 END) as status_verschmutzt,
SUM(CASE WHEN hygiene_status = "Kritisch" THEN 1 ELSE 0 END) as status_kritisch,
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) ?: [];
}
}
Vollständig herunterladen
Aktionen
Andere Versionen dieser Datei
| ID |
Version |
Typ |
Größe |
Datum |
| 1880 |
7 |
modified |
4.1 KB |
2025-12-27 23:52 |
| 1875 |
6 |
modified |
4.1 KB |
2025-12-27 23:51 |
| 1331 |
5 |
modified |
4.6 KB |
2025-12-25 16:25 |
| 1330 |
4 |
modified |
4.8 KB |
2025-12-25 16:25 |
| 1329 |
3 |
modified |
4.8 KB |
2025-12-25 16:25 |
| 1328 |
2 |
modified |
4.9 KB |
2025-12-25 16:25 |
| 1309 |
1 |
modified |
4.2 KB |
2025-12-25 16:15 |
← Zurück zur Übersicht