69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
# Standard library imports
|
|
from contextlib import asynccontextmanager
|
|
|
|
# Third-party imports
|
|
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from openai import OpenAI
|
|
|
|
# Local application imports
|
|
from app.cores.config import client
|
|
from app.cores.db import (
|
|
connect_to_mongo,
|
|
close_mongo_connection,
|
|
)
|
|
from app.routers.login import router as login_router
|
|
from app.routers.project import router as project_router
|
|
from app.routers.device import router as device_router
|
|
from app.routers.experiment_device import router as experiment_device_router
|
|
from app.routers.experiment import router as experiment_router
|
|
from app.routers.experiment_report import router as experiment_report_router
|
|
from app.routers.websocket import router as websocket_router
|
|
from app.routers.project_report import router as project_report_router
|
|
from app.routers.memo import router as memo_router
|
|
from app.routers.paper import router as paper_router
|
|
from app.routers.paper_summary import router as paper_summary_router
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
# Startup
|
|
await connect_to_mongo()
|
|
yield
|
|
# Shutdown
|
|
await close_mongo_connection()
|
|
|
|
# 更新 FastAPI 实例化
|
|
app = FastAPI(lifespan=lifespan)
|
|
|
|
# 添加路由
|
|
app.include_router(login_router)
|
|
app.include_router(project_router)
|
|
app.include_router(device_router)
|
|
app.include_router(experiment_device_router)
|
|
app.include_router(experiment_router)
|
|
app.include_router(experiment_report_router)
|
|
app.include_router(websocket_router)
|
|
app.include_router(project_report_router)
|
|
app.include_router(memo_router)
|
|
app.include_router(paper_router)
|
|
app.include_router(paper_summary_router)
|
|
# CORS configuration
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"],
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
expose_headers=["*"]
|
|
)
|
|
|
|
# Health check endpoint
|
|
@app.get("/health")
|
|
async def health_check():
|
|
return {"status": "healthy"}
|
|
|
|
if __name__ == "__main__":
|
|
import uvicorn
|
|
uvicorn.run(app, host="0.0.0.0", port=6000)
|