feat: expand AI workflow support and refresh docs
This commit is contained in:
@@ -21,6 +21,25 @@ class UserProfileUpdate(BaseModel):
|
||||
nickname: Optional[str] = None
|
||||
avatar: Optional[str] = None
|
||||
email: Optional[str] = None
|
||||
ai_provider: Optional[str] = None
|
||||
ai_base_url: Optional[str] = None
|
||||
ai_chat_base_url: Optional[str] = None
|
||||
ai_vision_base_url: Optional[str] = None
|
||||
ai_image_base_url: Optional[str] = None
|
||||
ai_api_key: Optional[str] = None
|
||||
ai_model: Optional[str] = None
|
||||
ai_vision_model: Optional[str] = None
|
||||
ai_image_model: Optional[str] = None
|
||||
clear_ai_api_key: bool = False
|
||||
|
||||
|
||||
def mask_api_key(value: Optional[str]) -> Optional[str]:
|
||||
if not value:
|
||||
return None
|
||||
raw = value.strip()
|
||||
if len(raw) <= 8:
|
||||
return "*" * len(raw)
|
||||
return f"{raw[:4]}{'*' * (len(raw) - 8)}{raw[-4:]}"
|
||||
|
||||
# ==================== 用户资料管理 ====================
|
||||
|
||||
@@ -43,6 +62,16 @@ async def get_user_profile(db: Session = Depends(get_db), current_username: str
|
||||
"vip_daily_quota": user.vip_daily_quota,
|
||||
"total_check_in_days": user.total_check_in_days,
|
||||
"consecutive_check_in": user.consecutive_check_in,
|
||||
"ai_provider": user.ai_provider or "ark",
|
||||
"ai_base_url": user.ai_base_url or "",
|
||||
"ai_chat_base_url": user.ai_chat_base_url or "",
|
||||
"ai_vision_base_url": user.ai_vision_base_url or "",
|
||||
"ai_image_base_url": user.ai_image_base_url or "",
|
||||
"ai_model": user.ai_model or "",
|
||||
"ai_vision_model": user.ai_vision_model or "",
|
||||
"ai_image_model": user.ai_image_model or "",
|
||||
"has_ai_api_key": bool(user.ai_api_key),
|
||||
"ai_api_key_masked": mask_api_key(user.ai_api_key),
|
||||
"created_at": user.created_at.isoformat() if user.created_at else None
|
||||
}
|
||||
|
||||
@@ -64,6 +93,28 @@ async def update_user_profile(data: UserProfileUpdate, db: Session = Depends(get
|
||||
user.avatar = data.avatar
|
||||
if data.email is not None:
|
||||
user.email = data.email
|
||||
if data.ai_provider is not None:
|
||||
user.ai_provider = data.ai_provider.strip().lower() or None
|
||||
if data.ai_base_url is not None:
|
||||
user.ai_base_url = data.ai_base_url.strip() or None
|
||||
if data.ai_chat_base_url is not None:
|
||||
user.ai_chat_base_url = data.ai_chat_base_url.strip() or None
|
||||
if data.ai_vision_base_url is not None:
|
||||
user.ai_vision_base_url = data.ai_vision_base_url.strip() or None
|
||||
if data.ai_image_base_url is not None:
|
||||
user.ai_image_base_url = data.ai_image_base_url.strip() or None
|
||||
if data.ai_model is not None:
|
||||
user.ai_model = data.ai_model.strip() or None
|
||||
if data.ai_vision_model is not None:
|
||||
user.ai_vision_model = data.ai_vision_model.strip() or None
|
||||
if data.ai_image_model is not None:
|
||||
user.ai_image_model = data.ai_image_model.strip() or None
|
||||
if data.clear_ai_api_key:
|
||||
user.ai_api_key = None
|
||||
elif data.ai_api_key is not None:
|
||||
trimmed_key = data.ai_api_key.strip()
|
||||
if trimmed_key:
|
||||
user.ai_api_key = trimmed_key
|
||||
|
||||
db.commit()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user