DauroCamilo commited on
Commit
783cfb7
·
verified ·
1 Parent(s): 4e6366f

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +69 -55
main.py CHANGED
@@ -1,55 +1,69 @@
1
- from fastapi import FastAPI, HTTPException
2
- from pydantic import BaseModel
3
- from typing import Dict, List
4
- import uuid
5
-
6
- app = FastAPI()
7
-
8
- # Estructura de datos en memoria
9
- salas: Dict[str, Dict] = {}
10
-
11
- # Modelos de datos
12
- class Mensaje(BaseModel):
13
- usuario_id: str
14
- texto: str
15
-
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] = {"mensajes": [], "jugadores": {}}
25
- return {"sala_id": nueva_id}
26
-
27
- @app.post("/sala/{sala_id}/registrar")
28
- def registrar_usuario(sala_id: str, jugador: Jugador):
29
- if sala_id not in salas:
30
- raise HTTPException(status_code=404, detail="Sala no encontrada")
31
- usuario_id = str(uuid.uuid4())
32
- salas[sala_id]["jugadores"][usuario_id] = jugador.nombre
33
- return {"usuario_id": usuario_id, "nombre": jugador.nombre}
34
-
35
- @app.post("/sala/{sala_id}/mensaje")
36
- def enviar_mensaje(sala_id: str, mensaje: Mensaje):
37
- if sala_id not in salas:
38
- raise HTTPException(status_code=404, detail="Sala no encontrada")
39
- if mensaje.usuario_id not in salas[sala_id]["jugadores"]:
40
- raise HTTPException(status_code=403, detail="Usuario no registrado en la sala")
41
- nombre = salas[sala_id]["jugadores"][mensaje.usuario_id]
42
- salas[sala_id]["mensajes"].append({"usuario": nombre, "texto": mensaje.texto})
43
- return {"ok": True}
44
-
45
- @app.get("/sala/{sala_id}/mensajes")
46
- def obtener_mensajes(sala_id: str):
47
- if sala_id not in salas:
48
- raise HTTPException(status_code=404, detail="Sala no encontrada")
49
- return salas[sala_id]["mensajes"]
50
-
51
- @app.get("/sala/{sala_id}/jugadores")
52
- def obtener_jugadores(sala_id: str):
53
- if sala_id not in salas:
54
- raise HTTPException(status_code=404, detail="Sala no encontrada")
55
- return list(salas[sala_id]["jugadores"].values())
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI, HTTPException
2
+ from pydantic import BaseModel
3
+ from typing import Dict, List
4
+ import uuid
5
+
6
+ app = FastAPI()
7
+
8
+ # Estructura de datos en memoria
9
+ salas: Dict[str, Dict] = {}
10
+
11
+ # Modelos de datos
12
+ class Mensaje(BaseModel):
13
+ usuario_id: str
14
+ texto: str
15
+
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):
44
+ if sala_id not in salas:
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())