from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.config import settings from app.routers import auth, championships, registrations, participant_lists, users @asynccontextmanager async def lifespan(app: FastAPI): # Start Instagram sync scheduler if configured if settings.INSTAGRAM_USER_ID and settings.INSTAGRAM_ACCESS_TOKEN: from app.services.instagram_service import start_scheduler scheduler = start_scheduler() yield scheduler.shutdown() else: yield app = FastAPI(title="Pole Dance Championships API", version="1.0.0", lifespan=lifespan) app.add_middleware( CORSMiddleware, allow_origins=settings.cors_origins_list, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(auth.router, prefix="/api/v1/auth", tags=["auth"]) app.include_router(users.router, prefix="/api/v1/users", tags=["users"]) app.include_router(championships.router, prefix="/api/v1/championships", tags=["championships"]) app.include_router(registrations.router, prefix="/api/v1/registrations", tags=["registrations"]) app.include_router(participant_lists.router, prefix="/api/v1", tags=["participant-lists"]) @app.get("/internal/health", tags=["health"]) async def health(): return {"status": "ok"}