feat: Initial project structure for WebTriviasMulti

- Backend: FastAPI + Python-SocketIO + SQLAlchemy
  - Models for categories, questions, game sessions, events
  - AI services for answer validation and question generation (Claude)
  - Room management with Redis
  - Game logic with stealing mechanics
  - Admin API for question management

- Frontend: React + Vite + TypeScript + Tailwind
  - 5 visual themes (DRRR, Retro, Minimal, RGB, Anime 90s)
  - Real-time game with Socket.IO
  - Achievement system
  - Replay functionality
  - Sound effects per theme

- Docker Compose for deployment
- Design documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-26 07:50:48 +00:00
commit 43021b9c3c
57 changed files with 5446 additions and 0 deletions

76
backend/app/main.py Normal file
View File

@@ -0,0 +1,76 @@
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import socketio
from contextlib import asynccontextmanager
from app.config import get_settings
from app.api import admin, game, replay
from app.sockets.game_events import register_socket_events
settings = get_settings()
# Socket.IO server
sio = socketio.AsyncServer(
async_mode="asgi",
cors_allowed_origins="*",
logger=True,
engineio_logger=True
)
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
print("Starting WebTriviasMulti server...")
yield
# Shutdown
print("Shutting down WebTriviasMulti server...")
# FastAPI app
app = FastAPI(
title="WebTriviasMulti API",
description="API para el juego de trivia multiplayer",
version="1.0.0",
lifespan=lifespan
)
# CORS middleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Include routers
app.include_router(admin.router, prefix="/api/admin", tags=["admin"])
app.include_router(game.router, prefix="/api/game", tags=["game"])
app.include_router(replay.router, prefix="/api/replay", tags=["replay"])
# Register Socket.IO events
register_socket_events(sio)
# Mount Socket.IO
socket_app = socketio.ASGIApp(sio, app)
@app.get("/")
async def root():
return {
"message": "WebTriviasMulti API",
"version": "1.0.0",
"status": "running"
}
@app.get("/health")
async def health_check():
return {"status": "healthy"}
# For running with uvicorn directly
if __name__ == "__main__":
import uvicorn
uvicorn.run("app.main:socket_app", host="0.0.0.0", port=8000, reload=True)