mirror of
https://github.com/snailyp/gemini-balance.git
synced 2026-09-05 07:26:39 +08:00
refactor: 集中版本逻辑并添加版本检查API
- 将 `get_current_version` 函数从 `application.py` 移动到 `helpers.py` 以实现更好的代码组织和可重用性。 - 在 `version_routes.py` 中引入新的 API 端点 `/api/version/check`,以提供当前版本、最新可用版本和更新状态。 - 更新了 `base.html`,通过调用新的 API 端点,使用 JavaScript 异步获取和显示版本信息。这取代了以前服务器端渲染版本信息的方式,并增加了定期检查。 - 移除了应用程序启动时(`lifespan` 函数)的自动更新检查,因为版本检查现在由前端通过 API 处理。 - 在 `routes.py` 中注册了新的版本路由。
This commit is contained in:
@@ -8,7 +8,7 @@ from fastapi.templating import Jinja2Templates
|
||||
|
||||
from app.core.security import verify_auth_token
|
||||
from app.log.logger import get_routes_logger
|
||||
from app.router import error_log_routes, gemini_routes, openai_routes, config_routes, scheduler_routes, stats_routes # 新增导入 stats_routes
|
||||
from app.router import error_log_routes, gemini_routes, openai_routes, config_routes, scheduler_routes, stats_routes, version_routes # 新增导入 version_routes
|
||||
from app.service.key.key_manager import get_key_manager_instance
|
||||
from app.service.stats_service import StatsService
|
||||
|
||||
@@ -33,6 +33,7 @@ def setup_routers(app: FastAPI) -> None:
|
||||
app.include_router(error_log_routes.router)
|
||||
app.include_router(scheduler_routes.router) # 新增包含 scheduler 路由
|
||||
app.include_router(stats_routes.router) # 包含 stats API 路由
|
||||
app.include_router(version_routes.router) # 包含 version API 路由
|
||||
|
||||
# 添加页面路由
|
||||
setup_page_routes(app)
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Optional
|
||||
|
||||
from app.service.update.update_service import check_for_updates
|
||||
from app.utils.helpers import get_current_version
|
||||
from app.log.logger import get_update_logger
|
||||
|
||||
router = APIRouter(prefix="/api/version", tags=["Version"])
|
||||
logger = get_update_logger()
|
||||
|
||||
class VersionInfo(BaseModel):
|
||||
current_version: str = Field(..., description="当前应用程序版本")
|
||||
latest_version: Optional[str] = Field(None, description="可用的最新版本")
|
||||
update_available: bool = Field(False, description="是否有可用更新")
|
||||
error_message: Optional[str] = Field(None, description="检查更新时发生的错误信息")
|
||||
|
||||
@router.get("/check", response_model=VersionInfo, summary="检查应用程序更新")
|
||||
async def get_version_info():
|
||||
"""
|
||||
检查当前应用程序版本与最新的 GitHub release 版本。
|
||||
"""
|
||||
try:
|
||||
current_version = get_current_version() # Use imported function
|
||||
update_available, latest_version, error_message = await check_for_updates()
|
||||
|
||||
# Log the result for debugging
|
||||
logger.info(f"Version check API result: current={current_version}, latest={latest_version}, available={update_available}, error='{error_message}'")
|
||||
|
||||
return VersionInfo(
|
||||
current_version=current_version,
|
||||
latest_version=latest_version,
|
||||
update_available=update_available,
|
||||
error_message=error_message
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Error in /api/version/check endpoint: {e}", exc_info=True)
|
||||
raise HTTPException(status_code=500, detail="检查版本信息时发生内部错误")
|
||||
Reference in New Issue
Block a user