feat: improve assessments filters and cleaning
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user