import os from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.routers.auth import router as auth_router from app.routers.broker import router as broker_router from app.routers.health import router as health_router from app.routers.password_reset import router as password_reset_router from app.routers.support_ticket import router as support_ticket_router from app.routers.system import router as system_router from app.routers.strategy import router as strategy_router from app.routers.zerodha import router as zerodha_router, public_router as zerodha_public_router from app.routers.paper import router as paper_router from market import router as market_router from paper_mtm import router as paper_mtm_router from app.services.strategy_service import init_log_state, resume_running_runs from app.admin_router import router as admin_router from app.admin_role_service import bootstrap_super_admin app = FastAPI( title="QuantFortune Backend", version="1.0" ) cors_origins = [ origin.strip() for origin in os.getenv("CORS_ORIGINS", "").split(",") if origin.strip() ] if not cors_origins: cors_origins = [ "http://localhost:3000", "http://127.0.0.1:3000", ] cors_origin_regex = os.getenv("CORS_ORIGIN_REGEX", "").strip() if not cors_origin_regex: cors_origin_regex = ( r"https://.*\\.ngrok-free\\.dev" r"|https://.*\\.ngrok-free\\.app" r"|https://.*\\.ngrok\\.io" ) app.add_middleware( CORSMiddleware, allow_origins=cors_origins, allow_origin_regex=cors_origin_regex or None, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(strategy_router) app.include_router(auth_router) app.include_router(broker_router) app.include_router(zerodha_router) app.include_router(zerodha_public_router) app.include_router(paper_router) app.include_router(market_router) app.include_router(paper_mtm_router) app.include_router(health_router) app.include_router(system_router) app.include_router(admin_router) app.include_router(support_ticket_router) app.include_router(password_reset_router) @app.on_event("startup") def init_app_state(): init_log_state() bootstrap_super_admin() resume_running_runs()