| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- """
- 平台API Key路由
- 提供平台API Key管理的RESTful API端点
- 需求: 7.1, 7.6
- """
- from typing import List
- from fastapi import APIRouter, Depends, HTTPException
- from sqlalchemy.orm import Session
- from app.database import get_db
- from app.dependencies.auth import get_current_user
- from app.models.user import User
- from app.services.platform_api_key_service import PlatformApiKeyService
- from app.schemas.platform_api_key import (
- ApiKeyCreate,
- ApiKeyResponse,
- ApiKeyCreateResponse,
- ApiKeyStatusUpdate
- )
- from app.schemas.model_schema import ApiResponse
- router = APIRouter(prefix="/api/platform/api-keys", tags=["平台API Key"])
- @router.post("", response_model=ApiResponse[ApiKeyCreateResponse], summary="创建API Key", description="创建新的API Key用于调用OpenAI兼容接口。每个用户最多5个有效密钥。")
- def create_api_key(
- request: ApiKeyCreate,
- current_user: User = Depends(get_current_user),
- db: Session = Depends(get_db)
- ):
- """
- 创建API Key
-
- - **name**: 备注名称(可选)
- - **key_type**: 密钥类型,public(访问云端模型)或local(访问本地模型)
-
- 返回完整的API Key(仅此一次显示,请妥善保存)
-
- 需求 7.1: 用户可以创建新的API Key
- 需求 7.2: 创建时显示完整密钥(仅此一次)
- 需求 7.4: 每用户最多5个有效API Key
- 新增: 支持设置密钥类型
- """
- service = PlatformApiKeyService(db)
- result = service.create_api_key(current_user.id, request.name, request.key_type)
- return ApiResponse(code=200, message="success", data=ApiKeyCreateResponse(**result))
- @router.get("", response_model=ApiResponse[List[ApiKeyResponse]], summary="获取API Key列表", description="获取当前用户的所有API Key列表(密钥已脱敏)。")
- def get_api_keys(
- current_user: User = Depends(get_current_user),
- db: Session = Depends(get_db)
- ):
- """
- 获取API Key列表
-
- 返回当前用户的所有API Key,密钥已脱敏显示(如sk-aigc-xxxx...xxxx)
-
- 需求 7.3: 列表中显示脱敏后的API Key
- """
- service = PlatformApiKeyService(db)
- keys = service.get_user_api_keys(current_user.id)
- return ApiResponse(
- code=200,
- message="success",
- data=[ApiKeyResponse.model_validate(k) for k in keys]
- )
- @router.put("/{key_id}", response_model=ApiResponse[ApiKeyResponse], summary="更新API Key状态", description="启用或禁用指定的API Key。")
- async def update_api_key_status(
- key_id: int,
- request: ApiKeyStatusUpdate,
- current_user: User = Depends(get_current_user),
- db: Session = Depends(get_db)
- ):
- """
- 更新API Key状态
-
- - **key_id**: API Key的ID
- - **status**: 新状态,active(启用)或disabled(禁用)
-
- 需求 7.5: 支持禁用/启用API Key
- """
- service = PlatformApiKeyService(db)
- key = service.update_api_key_status(key_id, current_user.id, request.status)
-
- # 异步删除缓存
- try:
- from app.services.cache_service import CacheService
- await CacheService.delete_api_key(key_id)
- except Exception as e:
- # 缓存删除失败不影响主流程
- print(f"删除缓存失败: {e}")
-
- return ApiResponse(code=200, message="success", data=ApiKeyResponse.model_validate(key))
- @router.delete("/{key_id}", response_model=ApiResponse[dict], summary="删除API Key", description="永久删除指定的API Key。")
- async def delete_api_key(
- key_id: int,
- current_user: User = Depends(get_current_user),
- db: Session = Depends(get_db)
- ):
- """
- 删除API Key
-
- - **key_id**: 要删除的API Key的ID
-
- 需求 7.6: 支持删除API Key
- """
- service = PlatformApiKeyService(db)
- success = service.delete_api_key(key_id, current_user.id)
-
- # 异步删除缓存
- try:
- from app.services.cache_service import CacheService
- await CacheService.delete_api_key(key_id)
- except Exception as e:
- # 缓存删除失败不影响主流程
- print(f"删除缓存失败: {e}")
-
- return ApiResponse(code=200, message="success", data={"success": True})
|