Backup #1309

ID1309
Dateipfad/var/www/dev.campus.systemische-tools.de/src/Infrastructure/Persistence/CodeQualityRepository.php
Version1
Typ modified
Größe4.2 KB
Hash69fd798fb1ba411b3075d4d1f972599b80fa6c8d3c6b219f328007a60e9dabe6
Datum2025-12-25 16:15:14
Geändert vonclaude-code-hook
GrundClaude Code Pre-Hook Backup vor Write-Operation
Datei existiert Ja

Dateiinhalt

<?php

declare(strict_types=1);

namespace Infrastructure\Persistence;

// @responsibility: Persistenz für Code-Quality-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 Quality-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, complexity_score, loc_score, dependency_score,
                hardcoded_count, issues_count, warnings_count, quality_grade, issues_json
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
        ');

        $stmt->execute([
            $analysisId,
            $qualityData['complexity_score'] ?? 0,
            $qualityData['loc_score'] ?? 0,
            $qualityData['dependency_score'] ?? 0,
            $qualityData['hardcoded_count'] ?? 0,
            $qualityData['issues_count'] ?? 0,
            $qualityData['warnings_count'] ?? 0,
            $qualityData['quality_grade'] ?? 'C',
            $qualityData['issues_json'] ?? '[]',
        ]);
    }

    /**
     * Holt alle Analysen mit Quality-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.complexity_score, cq.loc_score, cq.dependency_score,
                   cq.hardcoded_count, cq.issues_count, cq.warnings_count,
                   cq.quality_grade, 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['quality_grade'])) {
            $sql .= ' AND cq.quality_grade = :quality_grade';
            $params['quality_grade'] = $filters['quality_grade'];
        }

        if (!empty($filters['has_issues'])) {
            $sql .= ' AND cq.issues_count > 0';
        }

        $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 Quality-Statistiken.
     *
     * @return array<string, mixed>
     */
    public function getQualityStats(): array
    {
        $stmt = $this->pdo->query('
            SELECT
                COUNT(*) as total_files,
                SUM(CASE WHEN quality_grade = "A" THEN 1 ELSE 0 END) as grade_a,
                SUM(CASE WHEN quality_grade = "B" THEN 1 ELSE 0 END) as grade_b,
                SUM(CASE WHEN quality_grade = "C" THEN 1 ELSE 0 END) as grade_c,
                SUM(CASE WHEN quality_grade = "D" THEN 1 ELSE 0 END) as grade_d,
                SUM(CASE WHEN quality_grade = "F" THEN 1 ELSE 0 END) as grade_f,
                SUM(issues_count) as total_issues,
                SUM(hardcoded_count) as total_hardcoded,
                AVG(complexity_score) as avg_complexity
            FROM code_quality
        ');

        return $stmt->fetch(PDO::FETCH_ASSOC) ?: [];
    }
}

Vollständig herunterladen

Aktionen

Herunterladen

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