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 | |