feat: 算力令牌名称自定义,留空自动编号

- POST /opc/compute/tokens 接受 name 字段
- name 为空时按该用户名下令牌数自动命名(令牌1/令牌2/…)
This commit is contained in:
Pine
2026-09-07 14:08:02 +08:00
parent 1462ad3c82
commit edf87cbe5e
2 changed files with 19 additions and 3 deletions
+12 -2
View File
@@ -537,11 +537,21 @@ async def opc_compute_tokens(user: dict = Depends(require_roles("opc_member"))):
return {"items": out}
class OpcTokenCreateRequest(BaseModel):
"""创建算力令牌请求:name 为空时按用户令牌数自动编号(令牌1/令牌2/…)。"""
name: str = ""
@router.post("/compute/tokens", summary="创建算力令牌")
async def opc_compute_tokens_create(user: dict = Depends(require_roles("opc_member"))):
async def opc_compute_tokens_create(
body: OpcTokenCreateRequest | None = None,
user: dict = Depends(require_roles("opc_member")),
):
"""为当前用户签发一枚消费令牌(供应商自动对接 PineAgents)。"""
try:
token = await compute_client.issue_user_token(user.get("username"), name="OPC 端令牌")
token = await compute_client.issue_user_token(
user.get("username"), name=(body.name if body else "")
)
except compute_client.ComputeError as exc:
raise HTTPException(status_code=502, detail=f"算力引擎对接失败: {exc}") from exc
token = dict(token or {})
+7 -1
View File
@@ -111,7 +111,13 @@ async def get_logs(user_pat: str) -> dict:
async def issue_user_token(username: str, name: str = "") -> dict:
"""为某引擎用户签发消费令牌,返回 {id, key, ...}。"""
"""为某引擎用户签发消费令牌,返回 {id, key, ...}。
name 为空时自动编号(按该用户名下已有令牌数 +1,如“令牌1”“令牌2”)。
"""
if not name:
existing = await list_user_tokens(username)
name = f"令牌{len(existing or []) + 1}"
data = await _request(
method="POST", path="/api/token", headers=_admin_headers(),
json={"username": username, "name": name},