from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.database import init_db from app.routers import ( auth_router, conversation_router, document_router, task_router, forum_router, graph_router, agent_router, todo_router, settings_router, folder_router, skill_router, ) from app.routers.scheduler import router as scheduler_router from app.services.scheduler_service import start_scheduler, stop_scheduler, get_scheduler_status from app.config import settings import os @asynccontextmanager async def lifespan(app: FastAPI): # 启动 os.makedirs(settings.DATA_DIR, exist_ok=True) os.makedirs(settings.UPLOAD_DIR, exist_ok=True) os.makedirs(settings.CHROMA_PERSIST_DIR, exist_ok=True) await init_db() start_scheduler() yield # 关闭 stop_scheduler() app = FastAPI( title=settings.APP_NAME, version=settings.APP_VERSION, lifespan=lifespan, ) # CORS app.add_middleware( CORSMiddleware, allow_origins=settings.CORS_ORIGINS, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 注册路由 app.include_router(auth_router) app.include_router(conversation_router) app.include_router(document_router) app.include_router(task_router) app.include_router(forum_router) app.include_router(graph_router) app.include_router(agent_router) app.include_router(todo_router) app.include_router(settings_router) app.include_router(folder_router) app.include_router(skill_router) app.include_router(scheduler_router) @app.get("/api/health") async def health(): return { "status": "ok", "version": settings.APP_VERSION, "llm_provider": settings.LLM_PROVIDER, "scheduler": get_scheduler_status(), }