Files
aiagent/backend/app/api/app_update.py

60 lines
1.8 KiB
Python
Raw Normal View History

"""
应用升级检查 API
"""
from fastapi import APIRouter, Query
from app.core.config import settings
router = APIRouter(
prefix="/api/v1/app",
tags=["app"],
)
# 升级配置(可从 .env 或数据库读取,默认从配置文件)
_LATEST_ANDROID_VERSION = getattr(settings, 'LATEST_ANDROID_VERSION', settings.APP_VERSION)
_LATEST_ANDROID_URL = getattr(settings, 'LATEST_ANDROID_URL', "")
_ANDROID_FORCE_UPDATE_MIN = getattr(settings, 'ANDROID_FORCE_UPDATE_MIN', "1.0.0")
_ANDROID_RELEASE_NOTES = getattr(settings, 'ANDROID_RELEASE_NOTES', "")
def _version_tuple(v: str) -> tuple:
"""将版本号字符串转为可比较的元组。"""
try:
return tuple(int(x) for x in v.strip().split("."))
except (ValueError, AttributeError):
return (0,)
@router.get("/check-update")
async def check_update(
platform: str = Query("android", description="平台: android / ios"),
version: str = Query("1.0.0", description="当前客户端版本号"),
):
"""检查应用是否有新版本可用。"""
if platform == "android":
latest = _LATEST_ANDROID_VERSION
url = _LATEST_ANDROID_URL
force_min = _ANDROID_FORCE_UPDATE_MIN
notes = _ANDROID_RELEASE_NOTES
else:
latest = settings.APP_VERSION
url = ""
force_min = "1.0.0"
notes = ""
current_tuple = _version_tuple(version)
latest_tuple = _version_tuple(latest)
force_tuple = _version_tuple(force_min)
has_update = current_tuple < latest_tuple
force_update = current_tuple < force_tuple
return {
"latest_version": latest,
"current_version": version,
"has_update": has_update,
"force_update": force_update,
"update_url": url or "",
"release_notes": notes,
}