feat(app): support searching application list by API Key

This commit is contained in:
wxy
2026-03-20 17:07:23 +08:00
parent fabc8936ab
commit 911d5e0b34

View File

@@ -57,6 +57,7 @@ def list_apps(
page: int = 1,
pagesize: int = 10,
ids: Optional[str] = None,
api_key: Optional[str] = None,
db: Session = Depends(get_db),
current_user=Depends(get_current_user),
):
@@ -65,10 +66,28 @@ def list_apps(
- 默认包含本工作空间的应用和分享给本工作空间的应用
- 设置 include_shared=false 可以只查看本工作空间的应用
- 当提供 ids 参数时,按逗号分割获取指定应用,不分页
- 当提供 api_key 参数时,查找该 API Key 关联的应用
"""
from sqlalchemy import select as sa_select
from app.models.api_key_model import ApiKey
workspace_id = current_user.current_workspace_id
service = app_service.AppService(db)
# 通过 API Key 搜索:查出关联的 app id复用 ids 分支返回
if api_key:
matched = db.execute(
sa_select(ApiKey.resource_id).where(
ApiKey.workspace_id == workspace_id,
ApiKey.api_key.like(f"%{api_key}%"),
ApiKey.resource_id.isnot(None),
)
).scalars().all()
app_ids = [str(rid) for rid in matched]
items_orm = app_service.get_apps_by_ids(db, app_ids, workspace_id) if app_ids else []
items = [service._convert_to_schema(app, workspace_id) for app in items_orm]
return success(data=items)
# 当 ids 存在且不为 None 时,根据 ids 获取应用
if ids is not None:
app_ids = [app_id.strip() for app_id in ids.split(',') if app_id.strip()]