from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles from app.api.routes import router from app.core.config import CAPITAL_IMAGE_UPLOADS_DIR, MAIN_CAPITAL_FLOW_UPLOADS_DIR from app.core.bootstrap import bootstrap_data from app.services.sync_scheduler import sync_scheduler def create_app() -> FastAPI: app = FastAPI( title="Southbound Capital Monitor", version="0.1.0", description="南向资金监控平台 API", ) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) bootstrap_data() app.mount("/capital-images/uploads", StaticFiles(directory=CAPITAL_IMAGE_UPLOADS_DIR), name="capital-image-uploads") app.mount("/main-capital-flow-images", StaticFiles(directory=MAIN_CAPITAL_FLOW_UPLOADS_DIR), name="main-capital-flow-images") @app.on_event("startup") def startup_sync_scheduler() -> None: sync_scheduler.start() @app.on_event("shutdown") def shutdown_sync_scheduler() -> None: sync_scheduler.stop() app.include_router(router, prefix="/api") return app app = create_app()