from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager import asyncio from backend.core.database import connect_to_mongo, close_mongo_connection from backend.core.config import settings from backend.worker.scheduler import run_scheduler from backend.worker.telegram_bot import run_bot, send_sys_log # Import all routers from backend.api.auth_routes import router as auth_router from backend.api.hf_routes import router as hf_router from backend.api.cron_routes import router as cron_router from backend.api.admin_routes import router as admin_router @asynccontextmanager async def lifespan(app: FastAPI): # Startup: Connect to DB, start background worker AND Telethon Bot await connect_to_mongo() asyncio.create_task(run_scheduler()) asyncio.create_task(run_bot()) yield # Shutdown await send_sys_log("🛑 **System Shutting Down / Restarting.**") await close_mongo_connection() app = FastAPI( title=settings.PROJECT_NAME, description="SaaS PWA for managing Hugging Face Spaces and Cron Jobs", version="1.0.0", lifespan=lifespan ) # Configure CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) @app.get("/") async def root(): return {"message": "Welcome to HF Cron Manager Pro API"} # Include all routers app.include_router(auth_router) app.include_router(hf_router) app.include_router(cron_router) app.include_router(admin_router)