Files
notytex/services/temporal_facade.py

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()