Spaces:
Sleeping
Sleeping
File size: 2,188 Bytes
783cfb7 5078b39 783cfb7 5078b39 783cfb7 5078b39 783cfb7 5078b39 783cfb7 5078b39 783cfb7 5078b39 783cfb7 5078b39 783cfb7 5078b39 783cfb7 5078b39 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
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 {"ok": True, "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")
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}
@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")
jugadores = [
{"posicion": idx, "nombre": nombre}
for idx, (_, nombre) in enumerate(salas[sala_id]["jugadores"].items())
]
return jugadores
|