"""标注平台 API 路由。""" from fastapi import APIRouter, Query, HTTPException from app.schemas.annotation_platform import ( AnnotationProjectListResponse, AnnotationProjectDetailResponse, ProjectImportResponse, ) from app.services import annotation_platform_service router = APIRouter() @router.get("/projects", response_model=AnnotationProjectListResponse) async def get_projects( page: int = Query(default=1, ge=1), page_size: int = Query(default=20, ge=1, le=100), name: str | None = Query(default=None), type: str | None = Query(default=None), status: str | None = Query(default=None), ): """获取标注平台项目列表。""" try: data = await annotation_platform_service.list_projects( page, page_size, name=name, project_type=type, status=status, ) return AnnotationProjectListResponse(**data) except ValueError as e: raise HTTPException(status_code=503, detail=str(e)) except Exception as e: raise HTTPException(status_code=502, detail=f"标注平台请求失败: {str(e)}") @router.get("/projects/{project_id}", response_model=AnnotationProjectDetailResponse) async def get_project_detail(project_id: str): """获取项目详情。""" try: data = await annotation_platform_service.get_project_detail(project_id) return AnnotationProjectDetailResponse(**data) except ValueError as e: raise HTTPException(status_code=503, detail=str(e)) except Exception as e: raise HTTPException(status_code=502, detail=f"标注平台请求失败: {str(e)}") @router.post("/projects/{project_id}/import", response_model=ProjectImportResponse) async def import_project( project_id: str, project_name: str = Query(default=""), format: str = Query(default="alpaca"), ): """从标注平台导出项目数据并导入为训练数据集。""" try: data = await annotation_platform_service.import_project_dataset( project_id, project_name=project_name, format=format, ) return ProjectImportResponse(**data) except ValueError as e: raise HTTPException(status_code=503, detail=str(e)) except Exception as e: raise HTTPException(status_code=502, detail=f"标注平台导入失败: {str(e)}")