"""Use case dependency container.""" from typing import Any from .extract_audio_async import ExtractAudioAsyncUseCase from .process_job import ProcessJobUseCase from .check_job_status import CheckJobStatusUseCase from .download_audio_result import DownloadAudioResultUseCase from domain.services.validation_service import ValidationService from infrastructure.services.container import ServiceContainer class UseCaseContainer: """Container for all application use cases.""" def __init__(self, services: ServiceContainer, settings: Any): self.services = services self.settings = settings # Create validation service self.validation_service = ValidationService( max_file_size_mb=settings.max_direct_file_size_mb * 100, # Allow larger files for async supported_video_formats=settings.supported_video_formats, supported_audio_formats=settings.supported_audio_formats ) # Initialize use cases self._init_use_cases() def _init_use_cases(self): """Initialize all use cases with dependencies.""" # Process job use case (updated with notification service) self.process_job = ProcessJobUseCase( job_repository=self.services.job_repository, ffmpeg_service=self.services.ffmpeg_service, file_repository=self.services.file_repository, notification_service=self.services.notification_service # Added notification service ) # Async extraction use case self.extract_audio_async = ExtractAudioAsyncUseCase( job_repository=self.services.job_repository, validation_service=self.validation_service, process_job_use_case=self.process_job ) # Status checking use case self.check_job_status = CheckJobStatusUseCase( job_repository=self.services.job_repository ) # Download use case (updated with new dependencies) self.download_audio_result = DownloadAudioResultUseCase( job_repository=self.services.job_repository, file_repository=self.services.file_repository, validation_service=self.validation_service, ffmpeg_service=self.services.ffmpeg_service, audio_mime_types=self.settings.audio_mime_types )