"""API Key 管理端点。 路由前缀: /api/v1/api-keys """ from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel from app.core.auth import get_current_user from app.services import api_key_service router = APIRouter() class CreateApiKeyRequest(BaseModel): name: str = "default" class ApiKeyResponse(BaseModel): id: str key: str # 创建时返回完整 key,列表时返回 masked name: str status: str | None = None last_used_at: str | None = None created_at: str | None = None @router.post("/", response_model=ApiKeyResponse) async def create_key( req: CreateApiKeyRequest, current_user: dict = Depends(get_current_user), ): """创建新的 API Key(完整 key 仅返回一次)。""" user_id = current_user.get("sub") result = await api_key_service.create_api_key(user_id, req.name) return ApiKeyResponse(**result) @router.get("/", response_model=list[ApiKeyResponse]) async def list_keys(current_user: dict = Depends(get_current_user)): """列出当前用户的所有 API Key。""" user_id = current_user.get("sub") keys = await api_key_service.list_api_keys(user_id) return [ApiKeyResponse(**k) for k in keys] @router.delete("/{key_id}") async def revoke_key( key_id: str, current_user: dict = Depends(get_current_user), ): """吊销指定的 API Key。""" user_id = current_user.get("sub") result = await api_key_service.revoke_api_key(key_id, user_id) if "error" in result: raise HTTPException(status_code=404, detail=result["error"]) return result