Spaces:
Sleeping
Sleeping
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 | |
def crear_sala(): | |
while True: | |
nueva_id = str(uuid.uuid4())[:8] | |
if nueva_id not in salas: | |
salas[nueva_id] = { | |
"mensajes": [], | |
"jugadores": {} | |
} | |
return {"ok": True, "sala_id": nueva_id} | |
def registrar_usuario(sala_id: str, jugador: Jugador): | |
if sala_id not in salas: | |
raise HTTPException(status_code=404, detail="Sala no encontrada") | |
if len(salas[sala_id]["jugadores"]) >= 4: | |
raise HTTPException(status_code=409, detail="Sala llena") | |
usuario_id = str(uuid.uuid4()) | |
salas[sala_id]["jugadores"][usuario_id] = jugador.nombre | |
return {"usuario_id": usuario_id, "nombre": jugador.nombre} | |
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} | |
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"] | |
def obtener_jugadores(sala_id: str): | |
if sala_id not in salas: | |
raise HTTPException(status_code=404, detail="Sala no encontrada") | |
jugadores = [ | |
{"posicion": idx, "nombre": nombre} | |
for idx, (_, nombre) in enumerate(salas[sala_id]["jugadores"].items()) | |
] | |
return jugadores | |