import sys import os from pathlib import Path # 添加项目根目录到 Python 路径 # 无论从哪里运行,都能正确找到 app 模块 current_file = Path(__file__).resolve() project_root = current_file.parent.parent # backend/ if str(project_root) not in sys.path: sys.path.insert(0, str(project_root)) import uvicorn from fastapi import FastAPI, Request, HTTPException from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles from app.api.endpoints import auth, users, meetings, tags, admin, admin_dashboard, tasks, prompts, knowledge_base, client_downloads, voiceprint, audio from app.core.config import UPLOAD_DIR, API_CONFIG from app.api.endpoints.admin import load_system_config app = FastAPI( title="iMeeting API", description="智慧会议系统API", version="1.0.2" ) # 加载系统配置 load_system_config() # 添加CORS中间件 app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 静态文件服务 - 提供音频文件下载 if UPLOAD_DIR.exists(): app.mount("/uploads", StaticFiles(directory=str(UPLOAD_DIR)), name="uploads") # 包含API路由 app.include_router(auth.router, prefix="/api", tags=["Authentication"]) app.include_router(users.router, prefix="/api", tags=["Users"]) app.include_router(meetings.router, prefix="/api", tags=["Meetings"]) app.include_router(tags.router, prefix="/api", tags=["Tags"]) app.include_router(admin.router, prefix="/api", tags=["Admin"]) app.include_router(admin_dashboard.router, prefix="/api", tags=["AdminDashboard"]) app.include_router(tasks.router, prefix="/api", tags=["Tasks"]) app.include_router(prompts.router, prefix="/api", tags=["Prompts"]) app.include_router(knowledge_base.router, prefix="/api", tags=["KnowledgeBase"]) app.include_router(client_downloads.router, prefix="/api", tags=["ClientDownloads"]) app.include_router(voiceprint.router, prefix="/api", tags=["Voiceprint"]) app.include_router(audio.router, prefix="/api", tags=["Audio"]) @app.get("/") def read_root(): return {"message": "Welcome to iMeeting API"} @app.get("/health") def health_check(): """健康检查端点""" return { "status": "healthy", "service": "iMeeting API", "version": "1.0.2" } if __name__ == "__main__": # 简单的uvicorn配置,避免参数冲突 uvicorn.run( "app.main:app", host=API_CONFIG['host'], port=API_CONFIG['port'], limit_max_requests=1000, timeout_keep_alive=30, reload=True, )