DauroCamilo commited on
Commit
5078b39
·
verified ·
1 Parent(s): 783cfb7

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +26 -24
main.py CHANGED
@@ -16,28 +16,28 @@ class Mensaje(BaseModel):
16
  class Jugador(BaseModel):
17
  nombre: str
18
 
19
- class CrearSala(BaseModel):
20
- nombre_sala: str
21
-
22
  @app.post("/sala")
23
- def crear_sala(datos: CrearSala):
24
- nombre_sala = datos.nombre_sala
25
- if nombre_sala in salas:
26
- raise HTTPException(status_code=400, detail="Ya existe una sala con ese nombre")
27
- salas[nombre_sala] = {"mensajes": [], "jugadores": {}, "orden": []}
28
- return {"sala_id": nombre_sala}
 
 
 
29
 
30
  @app.post("/sala/{sala_id}/registrar")
31
  def registrar_usuario(sala_id: str, jugador: Jugador):
32
  if sala_id not in salas:
33
  raise HTTPException(status_code=404, detail="Sala no encontrada")
 
34
  if len(salas[sala_id]["jugadores"]) >= 4:
35
- raise HTTPException(status_code=403, detail="La sala está llena")
 
36
  usuario_id = str(uuid.uuid4())
37
  salas[sala_id]["jugadores"][usuario_id] = jugador.nombre
38
- salas[sala_id]["orden"].append(usuario_id)
39
- posicion = len(salas[sala_id]["orden"]) - 1
40
- return {"usuario_id": usuario_id, "nombre": jugador.nombre, "posicion": posicion}
41
 
42
  @app.post("/sala/{sala_id}/mensaje")
43
  def enviar_mensaje(sala_id: str, mensaje: Mensaje):
@@ -45,25 +45,27 @@ def enviar_mensaje(sala_id: str, mensaje: Mensaje):
45
  raise HTTPException(status_code=404, detail="Sala no encontrada")
46
  if mensaje.usuario_id not in salas[sala_id]["jugadores"]:
47
  raise HTTPException(status_code=403, detail="Usuario no registrado en la sala")
 
48
  nombre = salas[sala_id]["jugadores"][mensaje.usuario_id]
49
- salas[sala_id]["mensajes"].append({"usuario": nombre, "texto": mensaje.texto})
 
 
 
50
  return {"ok": True}
51
 
52
  @app.get("/sala/{sala_id}/mensajes")
53
- def obtener_mensajes(sala_id: str, desde: int = 0):
54
  if sala_id not in salas:
55
  raise HTTPException(status_code=404, detail="Sala no encontrada")
56
- mensajes = salas[sala_id]["mensajes"]
57
- if desde < 0 or desde > len(mensajes):
58
- raise HTTPException(status_code=400, detail="ID de mensaje fuera de rango")
59
- return {
60
- "desde": desde,
61
- "hasta": len(mensajes),
62
- "mensajes": mensajes[desde:]
63
- }
64
 
65
  @app.get("/sala/{sala_id}/jugadores")
66
  def obtener_jugadores(sala_id: str):
67
  if sala_id not in salas:
68
  raise HTTPException(status_code=404, detail="Sala no encontrada")
69
- return list(salas[sala_id]["jugadores"].values())
 
 
 
 
 
 
16
  class Jugador(BaseModel):
17
  nombre: str
18
 
 
 
 
19
  @app.post("/sala")
20
+ def crear_sala():
21
+ while True:
22
+ nueva_id = str(uuid.uuid4())[:8]
23
+ if nueva_id not in salas:
24
+ salas[nueva_id] = {
25
+ "mensajes": [],
26
+ "jugadores": {}
27
+ }
28
+ return {"ok": True, "sala_id": nueva_id}
29
 
30
  @app.post("/sala/{sala_id}/registrar")
31
  def registrar_usuario(sala_id: str, jugador: Jugador):
32
  if sala_id not in salas:
33
  raise HTTPException(status_code=404, detail="Sala no encontrada")
34
+
35
  if len(salas[sala_id]["jugadores"]) >= 4:
36
+ raise HTTPException(status_code=409, detail="Sala llena")
37
+
38
  usuario_id = str(uuid.uuid4())
39
  salas[sala_id]["jugadores"][usuario_id] = jugador.nombre
40
+ return {"usuario_id": usuario_id, "nombre": jugador.nombre}
 
 
41
 
42
  @app.post("/sala/{sala_id}/mensaje")
43
  def enviar_mensaje(sala_id: str, mensaje: Mensaje):
 
45
  raise HTTPException(status_code=404, detail="Sala no encontrada")
46
  if mensaje.usuario_id not in salas[sala_id]["jugadores"]:
47
  raise HTTPException(status_code=403, detail="Usuario no registrado en la sala")
48
+
49
  nombre = salas[sala_id]["jugadores"][mensaje.usuario_id]
50
+ salas[sala_id]["mensajes"].append({
51
+ "usuario": nombre,
52
+ "texto": mensaje.texto
53
+ })
54
  return {"ok": True}
55
 
56
  @app.get("/sala/{sala_id}/mensajes")
57
+ def obtener_mensajes(sala_id: str):
58
  if sala_id not in salas:
59
  raise HTTPException(status_code=404, detail="Sala no encontrada")
60
+ return salas[sala_id]["mensajes"]
 
 
 
 
 
 
 
61
 
62
  @app.get("/sala/{sala_id}/jugadores")
63
  def obtener_jugadores(sala_id: str):
64
  if sala_id not in salas:
65
  raise HTTPException(status_code=404, detail="Sala no encontrada")
66
+
67
+ jugadores = [
68
+ {"posicion": idx, "nombre": nombre}
69
+ for idx, (_, nombre) in enumerate(salas[sala_id]["jugadores"].items())
70
+ ]
71
+ return jugadores