""" 平台API Key数据传输对象定义 定义平台API Key相关API请求和响应的数据结构 需求: 7.1, 7.5, 7.6 """ from datetime import datetime from typing import Optional from pydantic import BaseModel, ConfigDict, Field class ApiKeyCreate(BaseModel): """创建API Key请求 需求 7.5: 用户创建API Key时允许设置备注名称 新增: 支持设置密钥类型 """ name: Optional[str] = Field(None, max_length=100, description="备注名称", examples=["我的API密钥"]) key_type: str = Field( default="public", pattern="^(public|local)$", description="密钥类型:public(公钥,访问云端模型)/ local(本地私钥,访问本地模型)", examples=["public"] ) class ApiKeyResponse(BaseModel): """API Key响应(列表展示用) 需求 7.3: API Key列表展示时仅显示密钥的前缀部分(如sk-aigc-xxxx...xxxx) 需求 7.6: 支持查看、禁用、启用、删除操作 新增: 密钥类型 """ id: int api_key_prefix: str = Field(..., description="脱敏显示,如sk-aigc-xxxx...xxxx") name: Optional[str] = Field(None, description="备注名称") status: str = Field(..., description="状态:active/disabled") key_type: str = Field(..., description="密钥类型:public/local") last_used_at: Optional[datetime] = Field(None, description="最后使用时间") created_at: datetime model_config = ConfigDict(from_attributes=True) class ApiKeyCreateResponse(BaseModel): """创建API Key响应(包含完整密钥,仅创建时返回一次) 需求 7.1: 生成以"sk-aigc-"为前缀、总长度48字符的密钥 需求 7.2: 仅在创建时完整显示一次密钥内容 新增: 密钥类型 """ id: int api_key: str = Field(..., description="完整密钥(仅此一次显示)") api_key_prefix: str = Field(..., description="密钥前缀") name: Optional[str] = Field(None, description="备注名称") key_type: str = Field(..., description="密钥类型:public/local") created_at: datetime class ApiKeyStatusUpdate(BaseModel): """更新API Key状态请求 需求 7.6: 支持禁用、启用操作 """ status: str = Field(..., pattern="^(active|disabled)$", description="状态:active/disabled", examples=["active"])