DauroCamilo's picture
Upload 2 files
1f2a0ba verified
raw
history blame
1.93 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 {"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")
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")
return list(salas[sala_id]["jugadores"].values())