from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles from fastapi.responses import FileResponse from packages.core.logger import app_logger # 我们将之前写好的 trade 接口引入 from apps.api.routers import trade, entity, export, subscription, bi @asynccontextmanager async def lifespan(app: FastAPI): # 启动时初始化 app_logger.info("Initializing API Service...") yield # 关闭时 app_logger.info("Closing API Service...") app = FastAPI( title="Customs Data API", description="海关数据查询服务 API", version="1.0.0", lifespan=lifespan ) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 挂载静态文件 app.mount("/static", StaticFiles(directory="apps/api/static"), name="static") @app.get("/", tags=["UI"]) async def serve_ui(): return FileResponse("apps/api/static/index.html") @app.get("/api/v1/health", tags=["System"]) async def health_check(): return {"status": "ok", "service": "Customs Data API"} app.include_router(trade.router, prefix="/api/v1/trade", tags=["Trade Search"]) app.include_router(entity.router, prefix="/api/v1/entity", tags=["Entity Search"]) app.include_router(export.router, prefix="/api/v1/export", tags=["Export"]) app.include_router(subscription.router, prefix="/api/v1/subscription", tags=["Subscription"]) app.include_router(bi.router, prefix="/api/v1/bi", tags=["BI Dashboard"])