from contextlib import asynccontextmanager from fastapi import FastAPI from database.creator import db_manager from router.invite import invite_router from router.jwc import jwc_router from router.login import login_router from router.aac import aac_router from router.user import user_router from richuru import install from fastapi.middleware.cors import CORSMiddleware as allow_origins import uvicorn # 导入配置管理器和日志设置 from config import config_manager from config.logger import setup_logger, get_logger # 初始化日志系统 setup_logger() logger = get_logger() install() @asynccontextmanager async def lifespan(app: FastAPI): # 验证配置文件完整性 if not config_manager.validate_config(): logger.error("配置文件验证失败,请检查配置") raise RuntimeError("配置文件验证失败") logger.info("应用程序启动中...") # 启动时连接数据库 await db_manager.init_db() logger.success("数据库连接成功") yield # 关闭时断开数据库连接 await db_manager.close_db() logger.info("应用程序已关闭") # 获取应用配置 app_config = config_manager.get_settings().app # Production FastAPI application app = FastAPI( lifespan=lifespan, title=app_config.title, description=app_config.description, version=app_config.version, debug=app_config.debug, ) # CORS配置 app.add_middleware( allow_origins, allow_origins=app_config.cors_allow_origins, allow_credentials=app_config.cors_allow_credentials, allow_methods=app_config.cors_allow_methods, allow_headers=app_config.cors_allow_headers, ) app.include_router(invite_router) app.include_router(jwc_router) app.include_router(login_router) app.include_router(aac_router) app.include_router(user_router) if __name__ == "__main__": uvicorn.run(app, host=app_config.host, port=app_config.port)