File size: 2,411 Bytes
92fd1a7
d369cf2
92fd1a7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fca9e8c
92fd1a7
 
 
fca9e8c
 
92fd1a7
 
 
 
 
 
 
 
 
 
 
 
 
 
8b33160
92fd1a7
 
 
8b33160
 
92fd1a7
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
"""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
        )