2d-game-backend / main.py
Student Hub
Initial backend for Hugging Face Spaces
2f4298a
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager
from database import engine, get_db
from models import Base
from routes import auth_routes, game, admin
from auth import init_admin_user
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Lifecycle events"""
# Startup
Base.metadata.create_all(bind=engine)
# Инициализация администратора
db = next(get_db())
try:
init_admin_user(db)
finally:
db.close()
print("✅ Database initialized")
print("✅ Admin user initialized")
yield
# Shutdown
print("👋 Shutting down...")
app = FastAPI(
title="2D Game API",
description="Backend API для 2D игры с авторизацией и статистикой",
version="1.0.0",
lifespan=lifespan
)
# CORS настройки
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # В продакшене укажите конкретные домены
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Подключение роутеров
app.include_router(auth_routes.router)
app.include_router(game.router)
app.include_router(admin.router)
@app.get("/")
async def root():
"""Корневой эндпоинт"""
return {
"message": "2D Game API",
"version": "1.0.0",
"docs": "/docs",
"endpoints": {
"auth": "/api/auth",
"game": "/api/game",
"admin": "/api/admin"
}
}
@app.get("/health")
async def health_check():
"""Проверка работоспособности"""
return {"status": "healthy"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)