feat: Afficher les statistiques de notes par matière côté administration
L'admin doit pouvoir voir en un coup d'œil quelles matières sont actives (notes saisies) pour décider lesquelles peuvent être supprimées sans perte de données. Auparavant, la suppression d'une matière était silencieuse : elle cascade-deletait évaluations et notes sans avertir. La liste des matières affiche désormais les compteurs d'enseignants, classes, évaluations et notes. La suppression déclenche une confirmation explicite quand la matière contient des notes, avec récapitulatif des volumes impactés, pour rendre l'action irréversible consciente. Côté tests, un endpoint de seeding HTTP remplace les appels docker exec dans les E2E (gain ~30-60s → 5-10s par test), et un trait partagé factorise le SQL de seeding entre les deux suites fonctionnelles.
This commit is contained in:
@@ -52,7 +52,9 @@ final readonly class DbalPaginatedSubjectsReader implements PaginatedSubjectsRea
|
||||
s.id, s.name, s.code, s.color, s.description, s.status,
|
||||
s.created_at, s.updated_at,
|
||||
(SELECT COUNT(*) FROM teacher_assignments ta WHERE ta.subject_id = s.id AND ta.status = 'active') AS teacher_count,
|
||||
(SELECT COUNT(DISTINCT ta.school_class_id) FROM teacher_assignments ta WHERE ta.subject_id = s.id AND ta.status = 'active') AS class_count
|
||||
(SELECT COUNT(DISTINCT ta.school_class_id) FROM teacher_assignments ta WHERE ta.subject_id = s.id AND ta.status = 'active') AS class_count,
|
||||
(SELECT COUNT(*) FROM evaluations e WHERE e.subject_id = s.id AND e.tenant_id = s.tenant_id) AS evaluation_count,
|
||||
(SELECT COUNT(g.id) FROM grades g INNER JOIN evaluations e ON e.id = g.evaluation_id WHERE e.subject_id = s.id AND e.tenant_id = s.tenant_id AND g.tenant_id = s.tenant_id) AS grade_count
|
||||
FROM subjects s
|
||||
WHERE {$whereClause}
|
||||
ORDER BY s.name ASC
|
||||
@@ -85,6 +87,10 @@ final readonly class DbalPaginatedSubjectsReader implements PaginatedSubjectsRea
|
||||
$teacherCountRaw = $row['teacher_count'] ?? 0;
|
||||
/** @var int|string $classCountRaw */
|
||||
$classCountRaw = $row['class_count'] ?? 0;
|
||||
/** @var int|string $evaluationCountRaw */
|
||||
$evaluationCountRaw = $row['evaluation_count'] ?? 0;
|
||||
/** @var int|string $gradeCountRaw */
|
||||
$gradeCountRaw = $row['grade_count'] ?? 0;
|
||||
|
||||
return new SubjectDto(
|
||||
id: $id,
|
||||
@@ -97,6 +103,8 @@ final readonly class DbalPaginatedSubjectsReader implements PaginatedSubjectsRea
|
||||
updatedAt: new DateTimeImmutable($updatedAt),
|
||||
teacherCount: (int) $teacherCountRaw,
|
||||
classCount: (int) $classCountRaw,
|
||||
evaluationCount: (int) $evaluationCountRaw,
|
||||
gradeCount: (int) $gradeCountRaw,
|
||||
);
|
||||
}, $rows);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user