geo/backend/app/main.py

56 lines
1.5 KiB
Python

from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.api.auth import router as auth_router
from app.api.citations import router as citations_router
from app.api.queries import router as queries_router
from app.api.reports import router as reports_router
from app.config import settings
from app.database import engine, Base
from app.workers.scheduler import query_scheduler
@asynccontextmanager
async def lifespan(app: FastAPI):
import app.models
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
query_scheduler.start()
yield
await query_scheduler.shutdown()
app = FastAPI(
title="GEO Platform API",
version="1.0.0",
lifespan=lifespan,
)
_allow_origins = [origin.strip() for origin in settings.CORS_ORIGINS.split(",") if origin.strip()]
if not _allow_origins:
_allow_origins = ["http://localhost:3000"]
app.add_middleware(
CORSMiddleware,
allow_origins=_allow_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(auth_router, prefix="/api/v1/auth", tags=["认证"])
app.include_router(queries_router, prefix="/api/v1/queries", tags=["查询词"])
app.include_router(citations_router, prefix="/api/v1/citations", tags=["引用数据"])
app.include_router(reports_router, prefix="/api/v1/reports", tags=["报告"])
@app.get("/health")
async def health_check():
return {"status": "ok"}