"""FastAPI application entry point.""" from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.config import settings from app.routers import ( auth, users, worlds, assets, avatar, world_content, internal, presence, groups, social_friends, profiles, chat_dm, chat_reports, chat_world, wallet, payments, ) from app.gateway import ws from app.services.game_servers import supervisor @asynccontextmanager async def lifespan(app: FastAPI): """Application lifespan: startup and shutdown events.""" supervisor.start() yield await supervisor.shutdown() app = FastAPI( title=settings.APP_NAME, version=settings.APP_VERSION, description="Agentic Game Platform - Backend API", lifespan=lifespan, ) # CORS app.add_middleware( CORSMiddleware, allow_origins=settings.cors_origins_list, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Include routers app.include_router(auth.router, prefix="/api/auth", tags=["auth"]) app.include_router(users.router, prefix="/api/users", tags=["users"]) app.include_router(worlds.router, prefix="/api/worlds", tags=["worlds"]) app.include_router(world_content.router, prefix="/api/worlds", tags=["world-content"]) app.include_router(assets.router, prefix="/api/assets", tags=["assets"]) app.include_router(avatar.router, prefix="/api/avatar", tags=["avatar"]) app.include_router(internal.router, prefix="/api/internal", tags=["internal"]) app.include_router(presence.router, prefix="/api/presence", tags=["presence"]) app.include_router(groups.router, prefix="/api/groups", tags=["groups"]) app.include_router(social_friends.router, prefix="/api/friends", tags=["friends"]) app.include_router(profiles.router, prefix="/api/profile", tags=["profile"]) app.include_router(chat_dm.router, prefix="/api/chat/dm", tags=["chat-dm"]) app.include_router(chat_reports.chat_router, prefix="/api/chat", tags=["chat-reports"]) app.include_router(chat_reports.moderation_router, prefix="/api/moderation", tags=["moderation"]) app.include_router(chat_world.router, prefix="/api/chat", tags=["chat-world"]) app.include_router(chat_world.router, prefix="/v1/chat", tags=["chat-world"]) app.include_router(wallet.router, prefix="/api/wallet", tags=["wallet"]) app.include_router(payments.router, prefix="/api/payments", tags=["payments"]) app.include_router(ws.router, prefix="/api", tags=["websocket"]) app.include_router(ws.router, prefix="/v1", tags=["websocket"]) @app.get("/api/health") async def health_check(): """Simple health check endpoint.""" return {"status": "ok", "app": settings.APP_NAME}