from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import Dict, List import uuid app = FastAPI() # Estructura de datos en memoria salas: Dict[str, Dict] = {} # Modelos de datos class Mensaje(BaseModel): usuario_id: str texto: str class Jugador(BaseModel): nombre: str @app.post("/sala") def crear_sala(): while True: nueva_id = str(uuid.uuid4())[:8] if nueva_id not in salas: salas[nueva_id] = {"mensajes": [], "jugadores": {}} return {"sala_id": nueva_id} @app.post("/sala/{sala_id}/registrar") def registrar_usuario(sala_id: str, jugador: Jugador): if sala_id not in salas: raise HTTPException(status_code=404, detail="Sala no encontrada") usuario_id = str(uuid.uuid4()) salas[sala_id]["jugadores"][usuario_id] = jugador.nombre return {"usuario_id": usuario_id, "nombre": jugador.nombre} @app.post("/sala/{sala_id}/mensaje") def enviar_mensaje(sala_id: str, mensaje: Mensaje): if sala_id not in salas: raise HTTPException(status_code=404, detail="Sala no encontrada") if mensaje.usuario_id not in salas[sala_id]["jugadores"]: raise HTTPException(status_code=403, detail="Usuario no registrado en la sala") nombre = salas[sala_id]["jugadores"][mensaje.usuario_id] salas[sala_id]["mensajes"].append({"usuario": nombre, "texto": mensaje.texto}) return {"ok": True} @app.get("/sala/{sala_id}/mensajes") def obtener_mensajes(sala_id: str): if sala_id not in salas: raise HTTPException(status_code=404, detail="Sala no encontrada") return salas[sala_id]["mensajes"] @app.get("/sala/{sala_id}/jugadores") def obtener_jugadores(sala_id: str): if sala_id not in salas: raise HTTPException(status_code=404, detail="Sala no encontrada") return list(salas[sala_id]["jugadores"].values())