""" 平台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})