DauroCamilo's picture
Update main.py
5078b39 verified
raw
history blame
2.19 kB
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