main.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import logging
  2. from contextlib import asynccontextmanager
  3. from fastapi import FastAPI
  4. from fastapi.middleware.cors import CORSMiddleware
  5. from app.api.v1 import documents, export, export_records, blocks
  6. from app.core.exceptions import register_exception_handlers
  7. from app.services.storage_monitor import start_background_monitor
  8. logging.getLogger("uvicorn.error").setLevel(logging.WARNING)
  9. @asynccontextmanager
  10. async def lifespan(app: FastAPI):
  11. # 启动后台磁盘监控(每 30 分钟检查一次)
  12. monitor_task = start_background_monitor()
  13. yield
  14. # 关闭时取消后台任务
  15. monitor_task.cancel()
  16. def create_app() -> FastAPI:
  17. app = FastAPI(
  18. title="Axonix Text Editor API",
  19. version="0.1.0",
  20. description="文本编辑器后端 API —— 阶段 0:文档 CRUD + 导出下载",
  21. lifespan=lifespan,
  22. )
  23. # CORS(开发阶段放开,生产按需收紧)
  24. app.add_middleware(
  25. CORSMiddleware,
  26. allow_origins=["*"],
  27. allow_credentials=True,
  28. allow_methods=["*"],
  29. allow_headers=["*"],
  30. )
  31. # 全局异常处理
  32. register_exception_handlers(app)
  33. # 路由注册
  34. app.include_router(documents.router, prefix="/api/v1")
  35. app.include_router(export.router, prefix="/api/v1")
  36. app.include_router(export_records.router, prefix="/api/v1")
  37. app.include_router(blocks.router, prefix="/api/v1")
  38. return app
  39. app = create_app()