forked from OpenJWC/OpenJWC-webapi
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmain.py
More file actions
52 lines (40 loc) · 1.86 KB
/
main.py
File metadata and controls
52 lines (40 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from fastapi import FastAPI
from app.api.v1.api_router import client_router, admin_router
from app.api.v2.api_router import v2_client_router, v2_admin_router
from app.utils.openjwc_cli import SQLCLI
from app.utils.logging_manager import setup_logger
from contextlib import asynccontextmanager
from app.utils.ping_check import diagnose_network_environment
from app.infrastructure.storage.sqlite.sql_db_service import db
import os
@asynccontextmanager
async def lifespan(app: FastAPI):
logger.info("正在启动服务...")
db.sync_admins_from_config()
# 启动时检查 article_order 同步(label_stats 在 _get_synced_connection 中一起重建)
from app.infrastructure.storage.lancedb.repository import get_article_repository
try:
repo = get_article_repository()
repo._get_synced_connection()
except Exception as e:
logger.warning(f"启动时同步检查失败: {e}")
api_targets = ["https://api.deepseek.com", "https://open.bigmodel.cn"]
is_network_healthy = await diagnose_network_environment(api_targets)
if not is_network_healthy:
logger.error("启动警告:关键依赖网络不通,后续 API 调用可能会失败")
yield
logger.info("服务正在关闭...")
ROOT_DIR = os.getcwd()
DATA_DIR = os.path.join(ROOT_DIR, "data")
BIN_DIR = os.path.join(ROOT_DIR, "bin")
app = FastAPI(title="教务处通知助手", lifespan=lifespan)
logger = setup_logger("main_logs")
app.include_router(client_router, prefix="/api/v1", tags=["客户端"])
app.include_router(admin_router, prefix="/api/v1", tags=["管理员", "控制面板"])
app.include_router(v2_client_router, prefix="/api/v2", tags=["客户端 v2"])
app.include_router(v2_admin_router, prefix="/api/v2", tags=["管理员 v2"])
@app.get("/")
def root():
return {"message": "Server is running!"}
if __name__ == "__main__":
SQLCLI().cmdloop()