feat: improve assessments filters and cleaning

This commit is contained in:
2025-08-07 14:47:16 +02:00
parent dea30fb2a5
commit 666f1a85bf
20 changed files with 64 additions and 3750 deletions

View File

@@ -15,6 +15,7 @@ class AssessmentRepository(BaseRepository[Assessment]):
self,
trimester: Optional[int] = None,
class_id: Optional[int] = None,
correction_status: Optional[str] = None,
sort_by: str = 'date_desc'
) -> List[Assessment]:
"""Trouve les évaluations selon les filtres avec eager loading des classes."""
@@ -35,7 +36,14 @@ class AssessmentRepository(BaseRepository[Assessment]):
# Application du tri
query = self._apply_sorting(query, sort_by)
return query.all()
# Récupérer les résultats
assessments = query.all()
# Filtrer par statut de correction si nécessaire
if correction_status:
assessments = self._filter_by_correction_status(assessments, correction_status)
return assessments
def find_with_full_details(self, id: int) -> Optional[Assessment]:
"""Trouve une évaluation avec tous ses détails."""
@@ -98,4 +106,22 @@ class AssessmentRepository(BaseRepository[Assessment]):
return query.order_by(Assessment.title.asc())
elif sort_by == 'class':
return query.join(ClassGroup).order_by(ClassGroup.name.asc())
return query
return query
def _filter_by_correction_status(self, assessments: List[Assessment], status: str) -> List[Assessment]:
"""Filtre les évaluations par statut de correction."""
filtered_assessments = []
for assessment in assessments:
progress = assessment.grading_progress
progress_status = progress.get('status', 'not_started')
# Mapper les statuts de progression aux filtres
if status == 'complete' and progress_status == 'completed':
filtered_assessments.append(assessment)
elif status == 'incomplete' and progress_status in ['in_progress', 'not_started']:
filtered_assessments.append(assessment)
elif status == 'not_started' and progress_status == 'not_started':
filtered_assessments.append(assessment)
return filtered_assessments