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