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 {"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") | |
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") | |
return list(salas[sala_id]["jugadores"].values()) | |