70 lines
3.0 KiB
Python
70 lines
3.0 KiB
Python
from typing import List
|
|
from models import Student
|
|
from repositories.temporal_student_repository import TemporalStudentRepository
|
|
from services.temporal_assessment_services import (
|
|
TemporalAssessmentProgressService,
|
|
TemporalStudentScoreCalculator,
|
|
TemporalClassStatisticsService,
|
|
TemporalProgressResult
|
|
)
|
|
from services.assessment_services import AssessmentStatisticsService, UnifiedGradingCalculator
|
|
from providers.concrete_providers import ConfigManagerProvider, SQLAlchemyDatabaseProvider
|
|
|
|
|
|
class TemporalAssessmentServicesFacade:
|
|
"""
|
|
Facade temporelle qui remplace la facade standard.
|
|
Intègre toute la logique temporelle de manière transparente.
|
|
"""
|
|
|
|
def __init__(self,
|
|
config_provider = None,
|
|
db_provider = None):
|
|
# Injection des repositories temporels
|
|
self.student_repo = TemporalStudentRepository()
|
|
|
|
# Providers par défaut si non fournis
|
|
if config_provider is None:
|
|
config_provider = ConfigManagerProvider()
|
|
if db_provider is None:
|
|
db_provider = SQLAlchemyDatabaseProvider()
|
|
|
|
# Services temporels
|
|
self.grading_calculator = UnifiedGradingCalculator(config_provider)
|
|
self.progress_service = TemporalAssessmentProgressService(db_provider, self.student_repo)
|
|
self.score_calculator = TemporalStudentScoreCalculator(
|
|
self.grading_calculator, db_provider, self.student_repo
|
|
)
|
|
self.statistics_service = AssessmentStatisticsService(self.score_calculator)
|
|
self.class_statistics_service = TemporalClassStatisticsService(self.student_repo)
|
|
|
|
def get_eligible_students(self, assessment) -> List[Student]:
|
|
"""Nouvelle méthode pour récupérer les élèves éligibles."""
|
|
return self.student_repo.find_eligible_for_assessment(assessment)
|
|
|
|
def get_grading_progress(self, assessment) -> TemporalProgressResult:
|
|
"""Progression avec logique temporelle."""
|
|
return self.progress_service.calculate_grading_progress(assessment)
|
|
|
|
def get_class_enrollment_summary(self, class_group_id: int, trimester: int = None):
|
|
"""Résumé des inscriptions pour une classe."""
|
|
return self.class_statistics_service.get_class_enrollment_summary(class_group_id, trimester)
|
|
|
|
# Compatibilité avec l'interface existante
|
|
def get_assessment_statistics(self, assessment):
|
|
"""Statistiques d'évaluation (héritée du service existant)."""
|
|
return self.statistics_service.get_assessment_statistics(assessment)
|
|
|
|
|
|
class TemporalAssessmentServicesFactory:
|
|
"""Factory pour créer les services temporels."""
|
|
|
|
@staticmethod
|
|
def create_temporal_facade(config_provider = None) -> TemporalAssessmentServicesFacade:
|
|
"""Crée une facade temporelle."""
|
|
return TemporalAssessmentServicesFacade(config_provider)
|
|
|
|
@staticmethod
|
|
def create_temporal_student_repository() -> TemporalStudentRepository:
|
|
"""Crée un repository d'élèves temporel."""
|
|
return TemporalStudentRepository() |