feat(class): landing class page
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
@@ -186,7 +186,7 @@ class ClassDashboardStats(BaseSchema):
|
||||
|
||||
class_id: int
|
||||
class_name: str
|
||||
trimester: int
|
||||
trimester: Optional[int] = None # None = vision annuelle
|
||||
students_count: int
|
||||
|
||||
# Statistiques globales
|
||||
|
||||
Reference in New Issue
Block a user