liumaolin
feat(api): implement local training MVP with adapter pattern
e054d0c
"""
依赖注入模块
提供 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",
]