feat(class): landing class page
All checks were successful
Build and Publish Docker Images / Build Backend Image (push) Successful in 5m26s
Build and Publish Docker Images / Build Frontend Image (push) Successful in 5m27s
Build and Publish Docker Images / Build Summary (push) Successful in 3s

This commit is contained in:
2025-12-09 16:02:47 +01:00
parent f76b033d55
commit ba25dd19db
3 changed files with 70 additions and 26 deletions

View File

@@ -225,17 +225,21 @@ async def get_class_students(
@router.get("/{class_id}/stats", response_model=ClassDashboardStats)
async def get_class_stats(
class_id: int,
trimester: int,
session: AsyncSessionDep,
trimester: Optional[int] = Query(None, description="Trimestre (1, 2, 3) ou None pour vision annuelle"),
):
"""
Récupère les statistiques complètes d'une classe pour un trimestre.
Récupère les statistiques complètes d'une classe pour un trimestre ou toute l'année.
Inclut:
- Moyennes par élève avec détail par évaluation
- Statistiques globales (moyenne, médiane, écart-type)
- Histogramme des moyennes
- Analyse par domaines et compétences (nombre d'évaluations + points)
Args:
class_id: ID de la classe
trimester: Trimestre spécifique (1, 2, 3) ou None pour vision annuelle (toutes évaluations)
"""
# Vérifier que la classe existe
class_query = select(ClassGroup).where(ClassGroup.id == class_id)
@@ -258,18 +262,20 @@ async def get_class_stats(
students_result = await session.execute(students_query)
students = students_result.scalars().all()
# Récupérer les évaluations du trimestre avec leurs relations
# Récupérer les évaluations (trimestre spécifique ou toutes)
assessments_query = (
select(Assessment)
.options(
selectinload(Assessment.exercises).selectinload(Exercise.grading_elements)
)
.where(
Assessment.class_group_id == class_id,
Assessment.trimester == trimester
)
.order_by(Assessment.date)
.where(Assessment.class_group_id == class_id)
)
# Filtrer par trimestre seulement si spécifié
if trimester is not None:
assessments_query = assessments_query.where(Assessment.trimester == trimester)
assessments_query = assessments_query.order_by(Assessment.date)
assessments_result = await session.execute(assessments_query)
assessments = assessments_result.scalars().all()