""" Value Objects pour la progression des évaluations. """ from dataclasses import dataclass from enum import Enum class ProgressStatus(str, Enum): """Statuts possibles de progression.""" NOT_STARTED = "not_started" IN_PROGRESS = "in_progress" COMPLETED = "completed" NO_STUDENTS = "no_students" NO_ELEMENTS = "no_elements" @dataclass(frozen=True) class ProgressResult: """ Résultat du calcul de progression de correction. Attributes: percentage: Pourcentage de complétion (0-100) completed: Nombre de notes saisies total: Nombre total de notes à saisir status: Statut de la progression students_count: Nombre d'élèves concernés """ percentage: int completed: int total: int status: ProgressStatus students_count: int def to_dict(self) -> dict: """Convertit en dictionnaire pour la sérialisation.""" return { "percentage": self.percentage, "completed": self.completed, "total": self.total, "status": self.status.value, "students_count": self.students_count } @classmethod def empty(cls) -> "ProgressResult": """Crée un résultat vide (pas d'éléments).""" return cls( percentage=0, completed=0, total=0, status=ProgressStatus.NO_ELEMENTS, students_count=0 ) @classmethod def no_students(cls) -> "ProgressResult": """Crée un résultat pour une classe sans élèves.""" return cls( percentage=0, completed=0, total=0, status=ProgressStatus.NO_STUDENTS, students_count=0 )