diff --git a/apps/api/app/api/routes/assets.py b/apps/api/app/api/routes/assets.py index 2cbfaf184..0ea6e54cc 100755 --- a/apps/api/app/api/routes/assets.py +++ b/apps/api/app/api/routes/assets.py @@ -1,5 +1,5 @@ import logging -from typing import Any, Optional +from typing import Any, List, Optional from app.api.routes._helpers import check_project_access, format_utc_datetime from app.auth import AuthenticatedUser, get_current_user @@ -14,6 +14,7 @@ from app.schemas.asset import ( AssetResponse, BatchClassifyRequest, BatchDeleteRequest, + BatchGetRequest, BatchMarkRequest, BatchOperationResponse, BatchTagRequest, @@ -370,6 +371,18 @@ def update_asset_review_status( return _to_asset_response(updated) +@router.post("/batch", response_model=List[AssetResponse]) +def batch_get_assets( + request: BatchGetRequest, + authenticated_user: AuthenticatedUser = Depends(get_current_user), + asset_repository: Any = Depends(get_asset_repository), +) -> list[AssetResponse]: + """批量获取素材详情(根据 ID 列表)。""" + items = asset_repository.find_by_ids(request.ids) + storage_service = get_storage_service() + return [_to_asset_response(item, storage_service) for item in items] + + @router.post("/batch-delete", response_model=BatchOperationResponse) def batch_delete_assets( request: BatchDeleteRequest, diff --git a/apps/api/app/schemas/asset.py b/apps/api/app/schemas/asset.py index 528a77f3d..2532467d0 100755 --- a/apps/api/app/schemas/asset.py +++ b/apps/api/app/schemas/asset.py @@ -58,6 +58,12 @@ class AssetResponse(BaseModel): MAX_BATCH_SIZE = 200 +class BatchGetRequest(BaseModel): + """批量获取素材详情请求。""" + + ids: list[str] = Field(..., min_length=1, max_length=MAX_BATCH_SIZE, description="素材 ID 列表") + + class BatchDeleteRequest(BaseModel): """批量删除请求(软删除)。"""