File size: 2,052 Bytes
e054d0c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
"""
依赖注入模块

提供 FastAPI 依赖注入函数,用于获取服务和适配器实例
"""

from functools import lru_cache
from typing import Generator

from ..services.task_service import TaskService
from ..services.experiment_service import ExperimentService
from ..services.file_service import FileService


# ============================================================
# 服务依赖
# ============================================================

@lru_cache()
def get_task_service() -> TaskService:
    """
    获取 TaskService 实例
    
    使用 lru_cache 确保单例
    
    Returns:
        TaskService 实例
        
    Example:
        >>> @router.post("/tasks")
        ... async def create_task(
        ...     request: QuickModeRequest,
        ...     service: TaskService = Depends(get_task_service)
        ... ):
        ...     return await service.create_quick_task(request)
    """
    return TaskService()


@lru_cache()
def get_experiment_service() -> ExperimentService:
    """
    获取 ExperimentService 实例
    
    Returns:
        ExperimentService 实例
    """
    return ExperimentService()


@lru_cache()
def get_file_service() -> FileService:
    """
    获取 FileService 实例
    
    Returns:
        FileService 实例
    """
    return FileService()


# ============================================================
# 通用依赖
# ============================================================

async def get_pagination_params(
    limit: int = 50,
    offset: int = 0
) -> dict:
    """
    分页参数依赖
    
    Args:
        limit: 每页数量,默认 50,最大 100
        offset: 偏移量,默认 0
        
    Returns:
        分页参数字典
    """
    # 限制最大值
    if limit > 100:
        limit = 100
    if limit < 1:
        limit = 1
    if offset < 0:
        offset = 0
    
    return {"limit": limit, "offset": offset}


__all__ = [
    "get_task_service",
    "get_experiment_service",
    "get_file_service",
    "get_pagination_params",
]