""" 主应用入口 """ import uvicorn from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager from loguru import logger from config import settings from app.api.callback import router as callback_router from app.models.database import create_tables from app.workers.message_worker import message_worker @asynccontextmanager async def lifespan(app: FastAPI): """应用生命周期管理""" # 启动时执行 logger.info("正在启动应用...") # 创建数据库表 try: create_tables() logger.info("数据库表创建成功") except Exception as e: logger.error(f"数据库表创建失败: {str(e)}") # 启动消息工作进程 try: message_worker.start() logger.info("消息工作进程启动成功") except Exception as e: logger.error(f"消息工作进程启动失败: {str(e)}") logger.info("应用启动完成") yield # 关闭时执行 logger.info("正在关闭应用...") # 停止消息工作进程 try: message_worker.stop() logger.info("消息工作进程已停止") except Exception as e: logger.error(f"消息工作进程停止失败: {str(e)}") logger.info("应用已关闭") # 创建FastAPI应用 app = FastAPI( title="E云管家-DifyAI对接服务", description="将E云管家消息转发到DifyAI并返回AI回答", version="1.0.0", lifespan=lifespan, ) # 添加CORS中间件 app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 注册路由 app.include_router(callback_router, prefix="/api/v1", tags=["回调接口"]) @app.get("/") async def root(): """根路径""" return { "message": "E云管家-DifyAI对接服务", "version": "1.0.0", "status": "running", } if __name__ == "__main__": # 配置日志 logger.add( settings.log_file, rotation="1 day", retention="30 days", level=settings.log_level, format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {name}:{function}:{line} - {message}", ) logger.info("启动E云管家-DifyAI对接服务") # 启动服务 uvicorn.run( "main:app", host=settings.server_host, port=settings.server_port, reload=settings.debug, log_level=settings.log_level.lower(), )