From a2c4278fe88b17c47937d2cf3416faa5b56b82d5 Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Sun, 9 Mar 2025 15:28:13 -0500
Subject: [PATCH 01/25] empezando
---
pom.xml | 11 ++++++++
.../java/pintudos/game/GameApplication.java | 7 ++---
.../game/controller/AuthController.java | 3 ++
.../game/controller/ChatController.java | 22 +++++++++++++++
.../game/controller/DibujoController.java | 3 ++
.../game/controller/SalaController.java | 6 ++++
.../java/pintudos/game/model/Jugador.java | 21 ++++++++++++++
src/main/java/pintudos/game/model/Sala.java | 28 +++++++++++++++++++
.../game/repository/JugadorRepository.java | 16 +++++++++++
.../game/repository/SalaRepository.java | 16 +++++++++++
.../java/pintudos/game/security/JwtUtil.java | 3 ++
.../game/security/SecurityConfig.java | 3 ++
.../pintudos/game/service/AuthService.java | 6 ++++
.../pintudos/game/service/ChatService.java | 11 ++++++++
.../pintudos/game/service/DibujoService.java | 6 ++++
.../pintudos/game/service/SalaService.java | 6 ++++
.../pintudos/game/websocket/ChatObserver.java | 3 ++
.../game/websocket/ChatWebSocketHandler.java | 3 ++
.../game/websocket/DibujoObserver.java | 3 ++
.../websocket/DibujoWebSocketHandler.java | 3 ++
20 files changed, 176 insertions(+), 4 deletions(-)
create mode 100644 src/main/java/pintudos/game/controller/AuthController.java
create mode 100644 src/main/java/pintudos/game/controller/ChatController.java
create mode 100644 src/main/java/pintudos/game/controller/DibujoController.java
create mode 100644 src/main/java/pintudos/game/controller/SalaController.java
create mode 100644 src/main/java/pintudos/game/model/Jugador.java
create mode 100644 src/main/java/pintudos/game/model/Sala.java
create mode 100644 src/main/java/pintudos/game/repository/JugadorRepository.java
create mode 100644 src/main/java/pintudos/game/repository/SalaRepository.java
create mode 100644 src/main/java/pintudos/game/security/JwtUtil.java
create mode 100644 src/main/java/pintudos/game/security/SecurityConfig.java
create mode 100644 src/main/java/pintudos/game/service/AuthService.java
create mode 100644 src/main/java/pintudos/game/service/ChatService.java
create mode 100644 src/main/java/pintudos/game/service/DibujoService.java
create mode 100644 src/main/java/pintudos/game/service/SalaService.java
create mode 100644 src/main/java/pintudos/game/websocket/ChatObserver.java
create mode 100644 src/main/java/pintudos/game/websocket/ChatWebSocketHandler.java
create mode 100644 src/main/java/pintudos/game/websocket/DibujoObserver.java
create mode 100644 src/main/java/pintudos/game/websocket/DibujoWebSocketHandler.java
diff --git a/pom.xml b/pom.xml
index 31be34e..bf1383c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,6 +61,17 @@
spring-security-test
test
+
+ org.projectlombok
+ lombok
+ 1.18.24
+ provided
+
+
+
+ org.springframework.data
+ spring-data-mongodb
+
diff --git a/src/main/java/pintudos/game/GameApplication.java b/src/main/java/pintudos/game/GameApplication.java
index 80b8d10..b447ebf 100644
--- a/src/main/java/pintudos/game/GameApplication.java
+++ b/src/main/java/pintudos/game/GameApplication.java
@@ -6,8 +6,7 @@
@SpringBootApplication
public class GameApplication {
- public static void main(String[] args) {
- SpringApplication.run(GameApplication.class, args);
- }
-
+ public static void main(String[] args) {
+ SpringApplication.run(GameApplication.class, args);
+ }
}
diff --git a/src/main/java/pintudos/game/controller/AuthController.java b/src/main/java/pintudos/game/controller/AuthController.java
new file mode 100644
index 0000000..e05bf93
--- /dev/null
+++ b/src/main/java/pintudos/game/controller/AuthController.java
@@ -0,0 +1,3 @@
+package pintudos.game.controller;
+
+public class AuthController {}
diff --git a/src/main/java/pintudos/game/controller/ChatController.java b/src/main/java/pintudos/game/controller/ChatController.java
new file mode 100644
index 0000000..05eaf71
--- /dev/null
+++ b/src/main/java/pintudos/game/controller/ChatController.java
@@ -0,0 +1,22 @@
+package pintudos.game.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import pintudos.game.model.MensajeChat;
+import pintudos.game.service.ChatService;
+
+@RestController
+@RequestMapping("/chat")
+public class ChatController {
+
+ @Autowired
+ private ChatService chatService;
+
+ @PostMapping("/adivinar")
+ public void adivinar(@RequestBody MensajeChat palabra) {
+ chatService.procesarMensaje(palabra);
+ }
+}
diff --git a/src/main/java/pintudos/game/controller/DibujoController.java b/src/main/java/pintudos/game/controller/DibujoController.java
new file mode 100644
index 0000000..0c102b6
--- /dev/null
+++ b/src/main/java/pintudos/game/controller/DibujoController.java
@@ -0,0 +1,3 @@
+package pintudos.game.controller;
+
+public class DibujoController {}
diff --git a/src/main/java/pintudos/game/controller/SalaController.java b/src/main/java/pintudos/game/controller/SalaController.java
new file mode 100644
index 0000000..d5d8178
--- /dev/null
+++ b/src/main/java/pintudos/game/controller/SalaController.java
@@ -0,0 +1,6 @@
+package pintudos.game.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@RequestMapping("/sala")
+public class SalaController {}
diff --git a/src/main/java/pintudos/game/model/Jugador.java b/src/main/java/pintudos/game/model/Jugador.java
new file mode 100644
index 0000000..3683dc0
--- /dev/null
+++ b/src/main/java/pintudos/game/model/Jugador.java
@@ -0,0 +1,21 @@
+package pintudos.game.model;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Getter
+@Setter
+@Builder
+@Document(collection = "jugadores")
+public class Jugador {
+
+ @Id
+ private String id;
+
+ private String nombre;
+ private int puntuación;
+ private int salaID;
+}
diff --git a/src/main/java/pintudos/game/model/Sala.java b/src/main/java/pintudos/game/model/Sala.java
new file mode 100644
index 0000000..1c80a73
--- /dev/null
+++ b/src/main/java/pintudos/game/model/Sala.java
@@ -0,0 +1,28 @@
+package pintudos.game.model;
+
+import java.sql.Time;
+import java.util.List;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document(collection = "salas")
+@Getter
+@Setter
+@Builder
+public class Sala {
+
+ @Id
+ private String id;
+
+ private String codigoSala;
+ private List jugadoresId;
+ private Jugador creadorSala;
+ private String estado;
+ private List palabrasSecretas;
+ private int rondaActual;
+ private int cantRondas;
+ private Time tiempoRonda;
+}
diff --git a/src/main/java/pintudos/game/repository/JugadorRepository.java b/src/main/java/pintudos/game/repository/JugadorRepository.java
new file mode 100644
index 0000000..b8c5b7a
--- /dev/null
+++ b/src/main/java/pintudos/game/repository/JugadorRepository.java
@@ -0,0 +1,16 @@
+package pintudos.game.repository;
+
+import java.util.List;
+import java.util.Optional;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.stereotype.Repository;
+import pintudos.game.model.Jugador;
+
+@Repository
+public interface JugadorRepository extends MongoRepository {
+ // Buscar un jugador por su nombre
+ Optional findByNombre(String nombre);
+
+ // Obtener jugadores ordenados por puntuación (de mayor a menor)
+ List findAllByOrderByPuntuacionDesc();
+}
diff --git a/src/main/java/pintudos/game/repository/SalaRepository.java b/src/main/java/pintudos/game/repository/SalaRepository.java
new file mode 100644
index 0000000..7c2f448
--- /dev/null
+++ b/src/main/java/pintudos/game/repository/SalaRepository.java
@@ -0,0 +1,16 @@
+package pintudos.game.repository;
+
+import java.util.List;
+import java.util.Optional;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.stereotype.Repository;
+import pintudos.game.model.Sala;
+
+@Repository
+public interface SalaRepository extends MongoRepository {
+ // Buscar una sala por su código
+ Optional findByCodigo(String codigo);
+
+ // Buscar salas en estado "en_juego"
+ List findByEstado(String estado);
+}
diff --git a/src/main/java/pintudos/game/security/JwtUtil.java b/src/main/java/pintudos/game/security/JwtUtil.java
new file mode 100644
index 0000000..a378ed3
--- /dev/null
+++ b/src/main/java/pintudos/game/security/JwtUtil.java
@@ -0,0 +1,3 @@
+package pintudos.game.security;
+
+public class JwtUtil {}
diff --git a/src/main/java/pintudos/game/security/SecurityConfig.java b/src/main/java/pintudos/game/security/SecurityConfig.java
new file mode 100644
index 0000000..a2095bc
--- /dev/null
+++ b/src/main/java/pintudos/game/security/SecurityConfig.java
@@ -0,0 +1,3 @@
+package pintudos.game.security;
+
+public class SecurityConfig {}
diff --git a/src/main/java/pintudos/game/service/AuthService.java b/src/main/java/pintudos/game/service/AuthService.java
new file mode 100644
index 0000000..df7eefb
--- /dev/null
+++ b/src/main/java/pintudos/game/service/AuthService.java
@@ -0,0 +1,6 @@
+package pintudos.game.service;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class AuthService {}
diff --git a/src/main/java/pintudos/game/service/ChatService.java b/src/main/java/pintudos/game/service/ChatService.java
new file mode 100644
index 0000000..97fa9f7
--- /dev/null
+++ b/src/main/java/pintudos/game/service/ChatService.java
@@ -0,0 +1,11 @@
+package pintudos.game.service;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class ChatService {
+
+ public void procesarMensaje(String palabra) {
+ if (palabra.getText().equalsIgnoreCase(palabraSecreta)) {}
+ }
+}
diff --git a/src/main/java/pintudos/game/service/DibujoService.java b/src/main/java/pintudos/game/service/DibujoService.java
new file mode 100644
index 0000000..0024b78
--- /dev/null
+++ b/src/main/java/pintudos/game/service/DibujoService.java
@@ -0,0 +1,6 @@
+package pintudos.game.service;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class DibujoService {}
diff --git a/src/main/java/pintudos/game/service/SalaService.java b/src/main/java/pintudos/game/service/SalaService.java
new file mode 100644
index 0000000..25ed67c
--- /dev/null
+++ b/src/main/java/pintudos/game/service/SalaService.java
@@ -0,0 +1,6 @@
+package pintudos.game.service;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class SalaService {}
diff --git a/src/main/java/pintudos/game/websocket/ChatObserver.java b/src/main/java/pintudos/game/websocket/ChatObserver.java
new file mode 100644
index 0000000..c6c2ea9
--- /dev/null
+++ b/src/main/java/pintudos/game/websocket/ChatObserver.java
@@ -0,0 +1,3 @@
+package pintudos.game.websocket;
+
+public class ChatObserver {}
diff --git a/src/main/java/pintudos/game/websocket/ChatWebSocketHandler.java b/src/main/java/pintudos/game/websocket/ChatWebSocketHandler.java
new file mode 100644
index 0000000..a65519f
--- /dev/null
+++ b/src/main/java/pintudos/game/websocket/ChatWebSocketHandler.java
@@ -0,0 +1,3 @@
+package pintudos.game.websocket;
+
+public class ChatWebSocketHandler {}
diff --git a/src/main/java/pintudos/game/websocket/DibujoObserver.java b/src/main/java/pintudos/game/websocket/DibujoObserver.java
new file mode 100644
index 0000000..b6ef51b
--- /dev/null
+++ b/src/main/java/pintudos/game/websocket/DibujoObserver.java
@@ -0,0 +1,3 @@
+package pintudos.game.websocket;
+
+public class DibujoObserver {}
diff --git a/src/main/java/pintudos/game/websocket/DibujoWebSocketHandler.java b/src/main/java/pintudos/game/websocket/DibujoWebSocketHandler.java
new file mode 100644
index 0000000..d9ce1cb
--- /dev/null
+++ b/src/main/java/pintudos/game/websocket/DibujoWebSocketHandler.java
@@ -0,0 +1,3 @@
+package pintudos.game.websocket;
+
+public class DibujoWebSocketHandler {}
From 53b97862113b7e476a63398dac9ebbf746f1d68e Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Sun, 23 Mar 2025 19:08:17 -0500
Subject: [PATCH 02/25] Empezando el home de crear o unirse a sala
---
.../game/controller/ChatController.java | 6 --
.../game/controller/SalaController.java | 46 ++++++++++++++-
.../game/repository/SalaRepository.java | 3 +
.../game/requests/CrearSalaRequest.java | 16 +++++
.../game/requests/UnirseSalaRequest.java | 13 +++++
.../pintudos/game/service/ChatService.java | 7 +--
.../pintudos/game/service/SalaService.java | 58 ++++++++++++++++++-
.../pintudos/game/service/jugadorService.java | 16 +++++
8 files changed, 151 insertions(+), 14 deletions(-)
create mode 100644 src/main/java/pintudos/game/requests/CrearSalaRequest.java
create mode 100644 src/main/java/pintudos/game/requests/UnirseSalaRequest.java
create mode 100644 src/main/java/pintudos/game/service/jugadorService.java
diff --git a/src/main/java/pintudos/game/controller/ChatController.java b/src/main/java/pintudos/game/controller/ChatController.java
index 05eaf71..355b4a7 100644
--- a/src/main/java/pintudos/game/controller/ChatController.java
+++ b/src/main/java/pintudos/game/controller/ChatController.java
@@ -5,7 +5,6 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import pintudos.game.model.MensajeChat;
import pintudos.game.service.ChatService;
@RestController
@@ -14,9 +13,4 @@ public class ChatController {
@Autowired
private ChatService chatService;
-
- @PostMapping("/adivinar")
- public void adivinar(@RequestBody MensajeChat palabra) {
- chatService.procesarMensaje(palabra);
- }
}
diff --git a/src/main/java/pintudos/game/controller/SalaController.java b/src/main/java/pintudos/game/controller/SalaController.java
index d5d8178..50a4e54 100644
--- a/src/main/java/pintudos/game/controller/SalaController.java
+++ b/src/main/java/pintudos/game/controller/SalaController.java
@@ -1,6 +1,50 @@
package pintudos.game.controller;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
+import pintudos.game.model.Jugador;
+import pintudos.game.model.Sala;
+import pintudos.game.requests.CrearSalaRequest;
+import pintudos.game.requests.UnirseSalaRequest;
+import pintudos.game.service.SalaService;
+import pintudos.game.service.jugadorService;
@RequestMapping("/sala")
-public class SalaController {}
+public class SalaController {
+
+ @Autowired
+ private SalaService salaService;
+
+ @Autowired
+ private jugadorService jugadorService;
+
+ // Unirse a una sala
+ @PostMapping("/unirse")
+ public ResponseEntity unirseASala(
+ @RequestBody UnirseSalaRequest request
+ ) {
+ boolean exito = salaService.unirseASala(
+ request.getCodigoSala(),
+ request.getJugador()
+ );
+ return exito
+ ? ResponseEntity.ok("Unido con éxito")
+ : ResponseEntity.badRequest().body("Código de sala inválido");
+ }
+
+ // Crear una nueva sala
+ @PostMapping("/crear")
+ public ResponseEntity crearSala(@RequestBody CrearSalaRequest request) {
+ Jugador jugador = jugadorService.registrarJugador(request.getJugadorHost());
+ Sala sala = salaService.crearSala(
+ jugador,
+ request.getTiempoPorRonda(),
+ request.getNumeroDeRondas(),
+ "Creada"
+ );
+ return ResponseEntity.ok(sala);
+ }
+}
diff --git a/src/main/java/pintudos/game/repository/SalaRepository.java b/src/main/java/pintudos/game/repository/SalaRepository.java
index 7c2f448..2c655d5 100644
--- a/src/main/java/pintudos/game/repository/SalaRepository.java
+++ b/src/main/java/pintudos/game/repository/SalaRepository.java
@@ -4,6 +4,7 @@
import java.util.Optional;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
+import pintudos.game.model.Jugador;
import pintudos.game.model.Sala;
@Repository
@@ -13,4 +14,6 @@ public interface SalaRepository extends MongoRepository {
// Buscar salas en estado "en_juego"
List findByEstado(String estado);
+
+ void agregarJugador(String codigoSala, Jugador jugador);
}
diff --git a/src/main/java/pintudos/game/requests/CrearSalaRequest.java b/src/main/java/pintudos/game/requests/CrearSalaRequest.java
new file mode 100644
index 0000000..43e7e08
--- /dev/null
+++ b/src/main/java/pintudos/game/requests/CrearSalaRequest.java
@@ -0,0 +1,16 @@
+package pintudos.game.requests;
+
+import java.sql.Time;
+import lombok.Getter;
+import lombok.Setter;
+import pintudos.game.model.Jugador;
+
+@Getter
+@Setter
+public class CrearSalaRequest {
+
+ private String codigoSala;
+ private Jugador jugadorHost;
+ private Time tiempoPorRonda;
+ private int numeroDeRondas;
+}
diff --git a/src/main/java/pintudos/game/requests/UnirseSalaRequest.java b/src/main/java/pintudos/game/requests/UnirseSalaRequest.java
new file mode 100644
index 0000000..2b7f1bd
--- /dev/null
+++ b/src/main/java/pintudos/game/requests/UnirseSalaRequest.java
@@ -0,0 +1,13 @@
+package pintudos.game.requests;
+
+import lombok.Getter;
+import lombok.Setter;
+import pintudos.game.model.Jugador;
+
+@Getter
+@Setter
+public class UnirseSalaRequest {
+
+ private String codigoSala;
+ private Jugador jugador;
+}
diff --git a/src/main/java/pintudos/game/service/ChatService.java b/src/main/java/pintudos/game/service/ChatService.java
index 97fa9f7..35b30d4 100644
--- a/src/main/java/pintudos/game/service/ChatService.java
+++ b/src/main/java/pintudos/game/service/ChatService.java
@@ -3,9 +3,4 @@
import org.springframework.stereotype.Service;
@Service
-public class ChatService {
-
- public void procesarMensaje(String palabra) {
- if (palabra.getText().equalsIgnoreCase(palabraSecreta)) {}
- }
-}
+public class ChatService {}
diff --git a/src/main/java/pintudos/game/service/SalaService.java b/src/main/java/pintudos/game/service/SalaService.java
index 25ed67c..b66d06d 100644
--- a/src/main/java/pintudos/game/service/SalaService.java
+++ b/src/main/java/pintudos/game/service/SalaService.java
@@ -1,6 +1,62 @@
package pintudos.game.service;
+import java.sql.Time;
+import java.util.Optional;
import org.springframework.stereotype.Service;
+import pintudos.game.model.Jugador;
+import pintudos.game.model.Sala;
+import pintudos.game.repository.JugadorRepository;
+import pintudos.game.repository.SalaRepository;
@Service
-public class SalaService {}
+public class SalaService {
+
+ private SalaRepository salaRepository;
+ private JugadorRepository jugadorRepository;
+
+ public boolean unirseASala(String codigoSala, Jugador jugador) {
+ // Verificamos si el jugador existe
+ if (jugadorRepository.existsById(jugador.getId())) {
+ // Buscamos la sala por su código
+ Optional salaOpt = salaRepository.findByCodigo(codigoSala);
+
+ if (salaOpt.isPresent()) {
+ Sala sala = salaOpt.get();
+
+ // Verificamos que la sala no esté llena y esté en estado "esperando"
+ if (
+ sala.getEstado().equals("esperando") &&
+ !sala.getJugadoresId().contains(jugador.getId())
+ ) {
+ // Agregamos al jugador
+ sala.getJugadoresId().add(jugador.getId());
+
+ // Guardamos la sala actualizada
+ salaRepository.save(sala);
+ return true; // El jugador se unió exitosamente
+ }
+ }
+ return false; // Sala no encontrada o ya no está disponible
+ }
+ return false; // El jugador no existe
+ }
+
+ public Sala crearSala(
+ Jugador jugador,
+ Time tiempoPorRonda,
+ int numeroDeRondas,
+ String string
+ ) {
+ Sala sala = Sala
+ .builder()
+ .codigoSala("codigo")
+ .creadorSala(jugador)
+ .estado(string)
+ .rondaActual(0)
+ .cantRondas(numeroDeRondas)
+ .tiempoRonda(tiempoPorRonda)
+ .build();
+ salaRepository.save(sala);
+ return sala;
+ }
+}
diff --git a/src/main/java/pintudos/game/service/jugadorService.java b/src/main/java/pintudos/game/service/jugadorService.java
new file mode 100644
index 0000000..8f26561
--- /dev/null
+++ b/src/main/java/pintudos/game/service/jugadorService.java
@@ -0,0 +1,16 @@
+package pintudos.game.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import pintudos.game.model.Jugador;
+import pintudos.game.repository.JugadorRepository;
+
+public class jugadorService {
+
+ @Autowired
+ private JugadorRepository jugadorRepository;
+
+ public Jugador registrarJugador(Jugador jugadorHost) {
+ jugadorRepository.save(jugadorHost);
+ return jugadorHost;
+ }
+}
From 6a5073494cd95e0a06e9f127419483c007547098 Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Tue, 1 Apr 2025 18:08:31 -0500
Subject: [PATCH 03/25] configuracion para creacion de salas y unirse
---
pom.xml | 1 +
.../pintudos/game/config/SecurityConfig.java | 28 ++++++
.../game/controller/AuthController.java | 3 -
.../game/controller/ChatController.java | 16 ----
.../game/controller/DibujoController.java | 3 -
.../game/controller/GameController.java | 50 ++++++++++
.../game/controller/SalaController.java | 50 ----------
.../game/controller/TraceController.java | 28 ++++++
.../game/controller/WebSocketController.java | 24 +++++
.../java/pintudos/game/model/CustomPoint.java | 53 +++++++++++
.../java/pintudos/game/model/GameRoom.java | 43 +++++++++
.../java/pintudos/game/model/Jugador.java | 21 -----
src/main/java/pintudos/game/model/Sala.java | 28 ------
src/main/java/pintudos/game/model/Trace.java | 94 +++++++++++++++++++
.../game/repository/JugadorRepository.java | 16 ----
.../game/repository/SalaRepository.java | 19 ----
.../game/repository/TraceRepository.java | 9 ++
.../game/requests/CrearSalaRequest.java | 16 ----
.../game/requests/UnirseSalaRequest.java | 13 ---
.../pintudos/game/service/AuthService.java | 6 --
.../pintudos/game/service/ChatService.java | 6 --
.../pintudos/game/service/DibujoService.java | 6 --
.../game/service/GameRoomService.java | 42 +++++++++
.../pintudos/game/service/SalaService.java | 62 ------------
.../pintudos/game/service/TraceService.java | 22 +++++
.../pintudos/game/service/jugadorService.java | 16 ----
.../pintudos/game/websocket/ChatObserver.java | 3 -
.../game/websocket/ChatWebSocketHandler.java | 3 -
.../game/websocket/DibujoObserver.java | 3 -
.../websocket/DibujoWebSocketHandler.java | 3 -
.../game/websocket/WebSocketConfig.java | 23 +++++
src/main/resources/application.properties | 1 +
32 files changed, 418 insertions(+), 293 deletions(-)
create mode 100644 src/main/java/pintudos/game/config/SecurityConfig.java
delete mode 100644 src/main/java/pintudos/game/controller/AuthController.java
delete mode 100644 src/main/java/pintudos/game/controller/ChatController.java
delete mode 100644 src/main/java/pintudos/game/controller/DibujoController.java
create mode 100644 src/main/java/pintudos/game/controller/GameController.java
delete mode 100644 src/main/java/pintudos/game/controller/SalaController.java
create mode 100644 src/main/java/pintudos/game/controller/TraceController.java
create mode 100644 src/main/java/pintudos/game/controller/WebSocketController.java
create mode 100644 src/main/java/pintudos/game/model/CustomPoint.java
create mode 100644 src/main/java/pintudos/game/model/GameRoom.java
delete mode 100644 src/main/java/pintudos/game/model/Jugador.java
delete mode 100644 src/main/java/pintudos/game/model/Sala.java
create mode 100644 src/main/java/pintudos/game/model/Trace.java
delete mode 100644 src/main/java/pintudos/game/repository/JugadorRepository.java
delete mode 100644 src/main/java/pintudos/game/repository/SalaRepository.java
create mode 100644 src/main/java/pintudos/game/repository/TraceRepository.java
delete mode 100644 src/main/java/pintudos/game/requests/CrearSalaRequest.java
delete mode 100644 src/main/java/pintudos/game/requests/UnirseSalaRequest.java
delete mode 100644 src/main/java/pintudos/game/service/AuthService.java
delete mode 100644 src/main/java/pintudos/game/service/ChatService.java
delete mode 100644 src/main/java/pintudos/game/service/DibujoService.java
create mode 100644 src/main/java/pintudos/game/service/GameRoomService.java
delete mode 100644 src/main/java/pintudos/game/service/SalaService.java
create mode 100644 src/main/java/pintudos/game/service/TraceService.java
delete mode 100644 src/main/java/pintudos/game/service/jugadorService.java
delete mode 100644 src/main/java/pintudos/game/websocket/ChatObserver.java
delete mode 100644 src/main/java/pintudos/game/websocket/ChatWebSocketHandler.java
delete mode 100644 src/main/java/pintudos/game/websocket/DibujoObserver.java
delete mode 100644 src/main/java/pintudos/game/websocket/DibujoWebSocketHandler.java
create mode 100644 src/main/java/pintudos/game/websocket/WebSocketConfig.java
diff --git a/pom.xml b/pom.xml
index bf1383c..deb0e44 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,6 +72,7 @@
org.springframework.data
spring-data-mongodb
+
diff --git a/src/main/java/pintudos/game/config/SecurityConfig.java b/src/main/java/pintudos/game/config/SecurityConfig.java
new file mode 100644
index 0000000..442b6fe
--- /dev/null
+++ b/src/main/java/pintudos/game/config/SecurityConfig.java
@@ -0,0 +1,28 @@
+package pintudos.game.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.web.SecurityFilterChain;
+
+@Configuration
+@EnableWebSecurity
+public class SecurityConfig {
+
+ @Bean
+ public SecurityFilterChain securityFilterChain(HttpSecurity http)
+ throws Exception {
+ // Desactivamos la seguridad para permitir el acceso sin autenticación
+ http
+ .csrf(csrf -> csrf.disable()) // Desactivar CSRF
+ .authorizeHttpRequests(requests ->
+ requests
+ .requestMatchers("/**")
+ .permitAll() // Permitir acceso a todas las rutas sin autenticación
+ .anyRequest()
+ .authenticated()
+ ); // Las demás rutas requieren autenticación
+ return http.build();
+ }
+}
diff --git a/src/main/java/pintudos/game/controller/AuthController.java b/src/main/java/pintudos/game/controller/AuthController.java
deleted file mode 100644
index e05bf93..0000000
--- a/src/main/java/pintudos/game/controller/AuthController.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package pintudos.game.controller;
-
-public class AuthController {}
diff --git a/src/main/java/pintudos/game/controller/ChatController.java b/src/main/java/pintudos/game/controller/ChatController.java
deleted file mode 100644
index 355b4a7..0000000
--- a/src/main/java/pintudos/game/controller/ChatController.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package pintudos.game.controller;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import pintudos.game.service.ChatService;
-
-@RestController
-@RequestMapping("/chat")
-public class ChatController {
-
- @Autowired
- private ChatService chatService;
-}
diff --git a/src/main/java/pintudos/game/controller/DibujoController.java b/src/main/java/pintudos/game/controller/DibujoController.java
deleted file mode 100644
index 0c102b6..0000000
--- a/src/main/java/pintudos/game/controller/DibujoController.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package pintudos.game.controller;
-
-public class DibujoController {}
diff --git a/src/main/java/pintudos/game/controller/GameController.java b/src/main/java/pintudos/game/controller/GameController.java
new file mode 100644
index 0000000..4f154bb
--- /dev/null
+++ b/src/main/java/pintudos/game/controller/GameController.java
@@ -0,0 +1,50 @@
+package pintudos.game.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.messaging.handler.annotation.MessageMapping;
+import org.springframework.messaging.handler.annotation.SendTo;
+import org.springframework.messaging.simp.SimpMessagingTemplate;
+import org.springframework.stereotype.Controller;
+import pintudos.game.model.GameRoom;
+import pintudos.game.model.Trace;
+import pintudos.game.service.GameRoomService;
+import pintudos.game.service.TraceService;
+
+@Controller
+public class GameController {
+
+ @Autowired
+ private GameRoomService gameRoomService;
+
+ @Autowired
+ private TraceService traceService;
+
+ @Autowired
+ private SimpMessagingTemplate messagingTemplate;
+
+ // Crear una nueva sala
+ @MessageMapping("/createRoom")
+ public void createRoom(String roomId) {
+ GameRoom room = gameRoomService.createRoom(roomId);
+ messagingTemplate.convertAndSend("/topic/rooms", room); // Notificar a los clientes sobre la nueva sala
+ }
+
+ // Unirse a una sala
+ @MessageMapping("/joinRoom")
+ public void joinRoom(String roomId, String player) {
+ GameRoom room = gameRoomService.joinRoom(roomId, player);
+ if (room != null) {
+ messagingTemplate.convertAndSend("/topic/rooms", room); // Enviar la información de la sala a todos los clientes
+ }
+ }
+
+ // Recibir un trazo y enviarlo a todos los miembros de la sala
+ @MessageMapping("/trace/{roomId}")
+ @SendTo("/topic/{roomId}/traces")
+ public Trace sendTrace(String roomId, Trace trace) {
+ // Guardar el trazo en la base de datos
+ traceService.saveTrace(trace);
+ gameRoomService.addTraceToRoom(roomId, trace); // Guardar el trazo en la sala
+ return trace; // Enviar el trazo a todos los jugadores en esa sala
+ }
+}
diff --git a/src/main/java/pintudos/game/controller/SalaController.java b/src/main/java/pintudos/game/controller/SalaController.java
deleted file mode 100644
index 50a4e54..0000000
--- a/src/main/java/pintudos/game/controller/SalaController.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package pintudos.game.controller;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import pintudos.game.model.Jugador;
-import pintudos.game.model.Sala;
-import pintudos.game.requests.CrearSalaRequest;
-import pintudos.game.requests.UnirseSalaRequest;
-import pintudos.game.service.SalaService;
-import pintudos.game.service.jugadorService;
-
-@RequestMapping("/sala")
-public class SalaController {
-
- @Autowired
- private SalaService salaService;
-
- @Autowired
- private jugadorService jugadorService;
-
- // Unirse a una sala
- @PostMapping("/unirse")
- public ResponseEntity unirseASala(
- @RequestBody UnirseSalaRequest request
- ) {
- boolean exito = salaService.unirseASala(
- request.getCodigoSala(),
- request.getJugador()
- );
- return exito
- ? ResponseEntity.ok("Unido con éxito")
- : ResponseEntity.badRequest().body("Código de sala inválido");
- }
-
- // Crear una nueva sala
- @PostMapping("/crear")
- public ResponseEntity crearSala(@RequestBody CrearSalaRequest request) {
- Jugador jugador = jugadorService.registrarJugador(request.getJugadorHost());
- Sala sala = salaService.crearSala(
- jugador,
- request.getTiempoPorRonda(),
- request.getNumeroDeRondas(),
- "Creada"
- );
- return ResponseEntity.ok(sala);
- }
-}
diff --git a/src/main/java/pintudos/game/controller/TraceController.java b/src/main/java/pintudos/game/controller/TraceController.java
new file mode 100644
index 0000000..dc861ab
--- /dev/null
+++ b/src/main/java/pintudos/game/controller/TraceController.java
@@ -0,0 +1,28 @@
+package pintudos.game.controller;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import pintudos.game.model.Trace;
+import pintudos.game.service.TraceService;
+
+@RestController
+@RequestMapping("/traces")
+@CrossOrigin("*") // Permite peticiones desde cualquier frontend
+public class TraceController {
+
+ @Autowired
+ private TraceService traceService;
+
+ // Guardar un trazo
+ @PostMapping
+ public Trace saveTrace(@RequestBody Trace trace) {
+ return traceService.saveTrace(trace); // Guardamos el trazo
+ }
+
+ // Obtener los trazos de una sala
+ @GetMapping("/{roomId}")
+ public List getTraces(@PathVariable String roomId) {
+ return traceService.getTracesByRoom(roomId); // Recuperamos los trazos de la sala
+ }
+}
diff --git a/src/main/java/pintudos/game/controller/WebSocketController.java b/src/main/java/pintudos/game/controller/WebSocketController.java
new file mode 100644
index 0000000..2070c73
--- /dev/null
+++ b/src/main/java/pintudos/game/controller/WebSocketController.java
@@ -0,0 +1,24 @@
+package pintudos.game.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.messaging.handler.annotation.MessageMapping;
+import org.springframework.messaging.handler.annotation.SendTo;
+import org.springframework.stereotype.Controller;
+import pintudos.game.model.Trace;
+import pintudos.game.service.TraceService;
+
+@Controller
+public class WebSocketController {
+
+ @Autowired
+ private TraceService traceService;
+
+ // Recibir un trazo y enviarlo a todos los clientes conectados
+ @MessageMapping("/trace")
+ @SendTo("/topic/traces")
+ public Trace sendTrace(Trace trace) throws Exception {
+ // Guardar el trazo en la base de datos
+ traceService.saveTrace(trace);
+ return trace; // Enviar el trazo a todos los clientes
+ }
+}
diff --git a/src/main/java/pintudos/game/model/CustomPoint.java b/src/main/java/pintudos/game/model/CustomPoint.java
new file mode 100644
index 0000000..a64efb7
--- /dev/null
+++ b/src/main/java/pintudos/game/model/CustomPoint.java
@@ -0,0 +1,53 @@
+package pintudos.game.model;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.List;
+
+public class CustomPoint {
+
+ private double latitude;
+ private double longitude;
+ private String type; // Campo opcional para JSON
+
+ public CustomPoint() {}
+
+ @JsonCreator
+ public CustomPoint(
+ @JsonProperty("type") String type,
+ @JsonProperty("coordinates") List coordinates
+ ) {
+ this.type = type; // Ignorar o validar que sea "Point"
+ this.longitude = coordinates.get(0);
+ this.latitude = coordinates.get(1);
+ }
+
+ public CustomPoint(double latitude, double longitude) {
+ this.latitude = latitude;
+ this.longitude = longitude;
+ }
+
+ public double getLatitude() {
+ return latitude;
+ }
+
+ public void setLatitude(double latitude) {
+ this.latitude = latitude;
+ }
+
+ public double getLongitude() {
+ return longitude;
+ }
+
+ public void setLongitude(double longitude) {
+ this.longitude = longitude;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+}
diff --git a/src/main/java/pintudos/game/model/GameRoom.java b/src/main/java/pintudos/game/model/GameRoom.java
new file mode 100644
index 0000000..86ff071
--- /dev/null
+++ b/src/main/java/pintudos/game/model/GameRoom.java
@@ -0,0 +1,43 @@
+package pintudos.game.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class GameRoom {
+
+ private String roomId;
+ private List players; // Listado de jugadores conectados
+ private List traces; // Lista de trazos realizados
+
+ public GameRoom(String roomId) {
+ this.roomId = roomId;
+ this.players = new ArrayList<>();
+ this.traces = new ArrayList<>();
+ }
+
+ // Métodos para agregar jugadores y trazos
+ public void addPlayer(String player) {
+ players.add(player);
+ }
+
+ public void removePlayer(String player) {
+ players.remove(player);
+ }
+
+ public void addTrace(Trace trace) {
+ traces.add(trace);
+ }
+
+ // Getters y Setters
+ public String getRoomId() {
+ return roomId;
+ }
+
+ public List getPlayers() {
+ return players;
+ }
+
+ public List getTraces() {
+ return traces;
+ }
+}
diff --git a/src/main/java/pintudos/game/model/Jugador.java b/src/main/java/pintudos/game/model/Jugador.java
deleted file mode 100644
index 3683dc0..0000000
--- a/src/main/java/pintudos/game/model/Jugador.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package pintudos.game.model;
-
-import lombok.Builder;
-import lombok.Getter;
-import lombok.Setter;
-import org.springframework.data.annotation.Id;
-import org.springframework.data.mongodb.core.mapping.Document;
-
-@Getter
-@Setter
-@Builder
-@Document(collection = "jugadores")
-public class Jugador {
-
- @Id
- private String id;
-
- private String nombre;
- private int puntuación;
- private int salaID;
-}
diff --git a/src/main/java/pintudos/game/model/Sala.java b/src/main/java/pintudos/game/model/Sala.java
deleted file mode 100644
index 1c80a73..0000000
--- a/src/main/java/pintudos/game/model/Sala.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package pintudos.game.model;
-
-import java.sql.Time;
-import java.util.List;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.Setter;
-import org.springframework.data.annotation.Id;
-import org.springframework.data.mongodb.core.mapping.Document;
-
-@Document(collection = "salas")
-@Getter
-@Setter
-@Builder
-public class Sala {
-
- @Id
- private String id;
-
- private String codigoSala;
- private List jugadoresId;
- private Jugador creadorSala;
- private String estado;
- private List palabrasSecretas;
- private int rondaActual;
- private int cantRondas;
- private Time tiempoRonda;
-}
diff --git a/src/main/java/pintudos/game/model/Trace.java b/src/main/java/pintudos/game/model/Trace.java
new file mode 100644
index 0000000..56f769d
--- /dev/null
+++ b/src/main/java/pintudos/game/model/Trace.java
@@ -0,0 +1,94 @@
+package pintudos.game.model;
+
+import com.mongodb.client.model.geojson.Point;
+import com.mongodb.client.model.geojson.Position;
+import java.util.List;
+import java.util.stream.Collectors;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+@Document(collection = "traces")
+public class Trace {
+
+ @Id
+ private String id;
+
+ private String roomId;
+ private List points; // Usar la clase personalizada
+ private String color;
+ private int width;
+
+ public Trace(
+ String roomId,
+ List points,
+ String color,
+ int width
+ ) {
+ this.roomId = roomId;
+ this.points = points;
+ this.color = color;
+ this.width = width;
+ }
+
+ // Getters y Setters
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(String roomId) {
+ this.roomId = roomId;
+ }
+
+ public List getPoints() {
+ return points;
+ }
+
+ public void setPoints(List points) {
+ this.points = points;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public void setWidth(int width) {
+ this.width = width;
+ }
+
+ // Métodos para convertir entre CustomPoint y Point
+ public List toMongoPoints() {
+ return points
+ .stream()
+ .map(p -> new Point(new Position(p.getLongitude(), p.getLatitude())))
+ .collect(Collectors.toList());
+ }
+
+ public void fromMongoPoints(List mongoPoints) {
+ this.points =
+ mongoPoints
+ .stream()
+ .map(p ->
+ new CustomPoint(
+ p.getCoordinates().getValues().get(1),
+ p.getCoordinates().getValues().get(0)
+ )
+ )
+ .collect(Collectors.toList());
+ }
+}
diff --git a/src/main/java/pintudos/game/repository/JugadorRepository.java b/src/main/java/pintudos/game/repository/JugadorRepository.java
deleted file mode 100644
index b8c5b7a..0000000
--- a/src/main/java/pintudos/game/repository/JugadorRepository.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package pintudos.game.repository;
-
-import java.util.List;
-import java.util.Optional;
-import org.springframework.data.mongodb.repository.MongoRepository;
-import org.springframework.stereotype.Repository;
-import pintudos.game.model.Jugador;
-
-@Repository
-public interface JugadorRepository extends MongoRepository {
- // Buscar un jugador por su nombre
- Optional findByNombre(String nombre);
-
- // Obtener jugadores ordenados por puntuación (de mayor a menor)
- List findAllByOrderByPuntuacionDesc();
-}
diff --git a/src/main/java/pintudos/game/repository/SalaRepository.java b/src/main/java/pintudos/game/repository/SalaRepository.java
deleted file mode 100644
index 2c655d5..0000000
--- a/src/main/java/pintudos/game/repository/SalaRepository.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package pintudos.game.repository;
-
-import java.util.List;
-import java.util.Optional;
-import org.springframework.data.mongodb.repository.MongoRepository;
-import org.springframework.stereotype.Repository;
-import pintudos.game.model.Jugador;
-import pintudos.game.model.Sala;
-
-@Repository
-public interface SalaRepository extends MongoRepository {
- // Buscar una sala por su código
- Optional findByCodigo(String codigo);
-
- // Buscar salas en estado "en_juego"
- List findByEstado(String estado);
-
- void agregarJugador(String codigoSala, Jugador jugador);
-}
diff --git a/src/main/java/pintudos/game/repository/TraceRepository.java b/src/main/java/pintudos/game/repository/TraceRepository.java
new file mode 100644
index 0000000..8184fd8
--- /dev/null
+++ b/src/main/java/pintudos/game/repository/TraceRepository.java
@@ -0,0 +1,9 @@
+package pintudos.game.repository;
+
+import java.util.List;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import pintudos.game.model.Trace;
+
+public interface TraceRepository extends MongoRepository {
+ List findByRoomId(String roomId); // Buscar trazos por ID de sala
+}
diff --git a/src/main/java/pintudos/game/requests/CrearSalaRequest.java b/src/main/java/pintudos/game/requests/CrearSalaRequest.java
deleted file mode 100644
index 43e7e08..0000000
--- a/src/main/java/pintudos/game/requests/CrearSalaRequest.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package pintudos.game.requests;
-
-import java.sql.Time;
-import lombok.Getter;
-import lombok.Setter;
-import pintudos.game.model.Jugador;
-
-@Getter
-@Setter
-public class CrearSalaRequest {
-
- private String codigoSala;
- private Jugador jugadorHost;
- private Time tiempoPorRonda;
- private int numeroDeRondas;
-}
diff --git a/src/main/java/pintudos/game/requests/UnirseSalaRequest.java b/src/main/java/pintudos/game/requests/UnirseSalaRequest.java
deleted file mode 100644
index 2b7f1bd..0000000
--- a/src/main/java/pintudos/game/requests/UnirseSalaRequest.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package pintudos.game.requests;
-
-import lombok.Getter;
-import lombok.Setter;
-import pintudos.game.model.Jugador;
-
-@Getter
-@Setter
-public class UnirseSalaRequest {
-
- private String codigoSala;
- private Jugador jugador;
-}
diff --git a/src/main/java/pintudos/game/service/AuthService.java b/src/main/java/pintudos/game/service/AuthService.java
deleted file mode 100644
index df7eefb..0000000
--- a/src/main/java/pintudos/game/service/AuthService.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package pintudos.game.service;
-
-import org.springframework.stereotype.Service;
-
-@Service
-public class AuthService {}
diff --git a/src/main/java/pintudos/game/service/ChatService.java b/src/main/java/pintudos/game/service/ChatService.java
deleted file mode 100644
index 35b30d4..0000000
--- a/src/main/java/pintudos/game/service/ChatService.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package pintudos.game.service;
-
-import org.springframework.stereotype.Service;
-
-@Service
-public class ChatService {}
diff --git a/src/main/java/pintudos/game/service/DibujoService.java b/src/main/java/pintudos/game/service/DibujoService.java
deleted file mode 100644
index 0024b78..0000000
--- a/src/main/java/pintudos/game/service/DibujoService.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package pintudos.game.service;
-
-import org.springframework.stereotype.Service;
-
-@Service
-public class DibujoService {}
diff --git a/src/main/java/pintudos/game/service/GameRoomService.java b/src/main/java/pintudos/game/service/GameRoomService.java
new file mode 100644
index 0000000..f5f0b34
--- /dev/null
+++ b/src/main/java/pintudos/game/service/GameRoomService.java
@@ -0,0 +1,42 @@
+package pintudos.game.service;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.springframework.stereotype.Service;
+import pintudos.game.model.GameRoom;
+import pintudos.game.model.Trace;
+
+@Service
+public class GameRoomService {
+
+ private Map rooms = new HashMap<>();
+
+ // Crear una nueva sala
+ public GameRoom createRoom(String roomId) {
+ GameRoom room = new GameRoom(roomId);
+ rooms.put(roomId, room);
+ return room;
+ }
+
+ // Unirse a una sala
+ public GameRoom joinRoom(String roomId, String player) {
+ GameRoom room = rooms.get(roomId);
+ if (room != null) {
+ room.addPlayer(player);
+ }
+ return room;
+ }
+
+ // Obtener una sala por ID
+ public GameRoom getRoom(String roomId) {
+ return rooms.get(roomId);
+ }
+
+ // Guardar un trazo en la sala
+ public void addTraceToRoom(String roomId, Trace trace) {
+ GameRoom room = rooms.get(roomId);
+ if (room != null) {
+ room.addTrace(trace);
+ }
+ }
+}
diff --git a/src/main/java/pintudos/game/service/SalaService.java b/src/main/java/pintudos/game/service/SalaService.java
deleted file mode 100644
index b66d06d..0000000
--- a/src/main/java/pintudos/game/service/SalaService.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package pintudos.game.service;
-
-import java.sql.Time;
-import java.util.Optional;
-import org.springframework.stereotype.Service;
-import pintudos.game.model.Jugador;
-import pintudos.game.model.Sala;
-import pintudos.game.repository.JugadorRepository;
-import pintudos.game.repository.SalaRepository;
-
-@Service
-public class SalaService {
-
- private SalaRepository salaRepository;
- private JugadorRepository jugadorRepository;
-
- public boolean unirseASala(String codigoSala, Jugador jugador) {
- // Verificamos si el jugador existe
- if (jugadorRepository.existsById(jugador.getId())) {
- // Buscamos la sala por su código
- Optional salaOpt = salaRepository.findByCodigo(codigoSala);
-
- if (salaOpt.isPresent()) {
- Sala sala = salaOpt.get();
-
- // Verificamos que la sala no esté llena y esté en estado "esperando"
- if (
- sala.getEstado().equals("esperando") &&
- !sala.getJugadoresId().contains(jugador.getId())
- ) {
- // Agregamos al jugador
- sala.getJugadoresId().add(jugador.getId());
-
- // Guardamos la sala actualizada
- salaRepository.save(sala);
- return true; // El jugador se unió exitosamente
- }
- }
- return false; // Sala no encontrada o ya no está disponible
- }
- return false; // El jugador no existe
- }
-
- public Sala crearSala(
- Jugador jugador,
- Time tiempoPorRonda,
- int numeroDeRondas,
- String string
- ) {
- Sala sala = Sala
- .builder()
- .codigoSala("codigo")
- .creadorSala(jugador)
- .estado(string)
- .rondaActual(0)
- .cantRondas(numeroDeRondas)
- .tiempoRonda(tiempoPorRonda)
- .build();
- salaRepository.save(sala);
- return sala;
- }
-}
diff --git a/src/main/java/pintudos/game/service/TraceService.java b/src/main/java/pintudos/game/service/TraceService.java
new file mode 100644
index 0000000..d54f2a9
--- /dev/null
+++ b/src/main/java/pintudos/game/service/TraceService.java
@@ -0,0 +1,22 @@
+package pintudos.game.service;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import pintudos.game.model.Trace;
+import pintudos.game.repository.TraceRepository;
+
+@Service
+public class TraceService {
+
+ @Autowired
+ private TraceRepository traceRepository;
+
+ public Trace saveTrace(Trace trace) {
+ return traceRepository.save(trace); // Guardamos el trazo
+ }
+
+ public List getTracesByRoom(String roomId) {
+ return traceRepository.findByRoomId(roomId); // Recuperamos los trazos de la sala
+ }
+}
diff --git a/src/main/java/pintudos/game/service/jugadorService.java b/src/main/java/pintudos/game/service/jugadorService.java
deleted file mode 100644
index 8f26561..0000000
--- a/src/main/java/pintudos/game/service/jugadorService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package pintudos.game.service;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import pintudos.game.model.Jugador;
-import pintudos.game.repository.JugadorRepository;
-
-public class jugadorService {
-
- @Autowired
- private JugadorRepository jugadorRepository;
-
- public Jugador registrarJugador(Jugador jugadorHost) {
- jugadorRepository.save(jugadorHost);
- return jugadorHost;
- }
-}
diff --git a/src/main/java/pintudos/game/websocket/ChatObserver.java b/src/main/java/pintudos/game/websocket/ChatObserver.java
deleted file mode 100644
index c6c2ea9..0000000
--- a/src/main/java/pintudos/game/websocket/ChatObserver.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package pintudos.game.websocket;
-
-public class ChatObserver {}
diff --git a/src/main/java/pintudos/game/websocket/ChatWebSocketHandler.java b/src/main/java/pintudos/game/websocket/ChatWebSocketHandler.java
deleted file mode 100644
index a65519f..0000000
--- a/src/main/java/pintudos/game/websocket/ChatWebSocketHandler.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package pintudos.game.websocket;
-
-public class ChatWebSocketHandler {}
diff --git a/src/main/java/pintudos/game/websocket/DibujoObserver.java b/src/main/java/pintudos/game/websocket/DibujoObserver.java
deleted file mode 100644
index b6ef51b..0000000
--- a/src/main/java/pintudos/game/websocket/DibujoObserver.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package pintudos.game.websocket;
-
-public class DibujoObserver {}
diff --git a/src/main/java/pintudos/game/websocket/DibujoWebSocketHandler.java b/src/main/java/pintudos/game/websocket/DibujoWebSocketHandler.java
deleted file mode 100644
index d9ce1cb..0000000
--- a/src/main/java/pintudos/game/websocket/DibujoWebSocketHandler.java
+++ /dev/null
@@ -1,3 +0,0 @@
-package pintudos.game.websocket;
-
-public class DibujoWebSocketHandler {}
diff --git a/src/main/java/pintudos/game/websocket/WebSocketConfig.java b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
new file mode 100644
index 0000000..ea40d62
--- /dev/null
+++ b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
@@ -0,0 +1,23 @@
+package pintudos.game.websocket;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.messaging.simp.config.MessageBrokerRegistry;
+import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
+import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
+import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
+
+@Configuration
+@EnableWebSocketMessageBroker
+public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
+
+ @Override
+ public void configureMessageBroker(MessageBrokerRegistry config) {
+ config.enableSimpleBroker("/topic"); // La cola donde los mensajes serán enviados
+ config.setApplicationDestinationPrefixes("/app"); // Prefijo para los endpoints de mensajes
+ }
+
+ @Override
+ public void registerStompEndpoints(StompEndpointRegistry registry) {
+ registry.addEndpoint("/game").withSockJS(); // Endpoint de conexión de WebSocket
+ }
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 2762482..438f7c9 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1 +1,2 @@
spring.application.name=game
+spring.data.mongodb.uri=mongodb+srv://diego:marzo245@universidad.lavtxfi.mongodb.net/pintudos?retryWrites=true&w=majority
From 18b62b5a4dbd5aaf40c88695413ac79ca1e064b5 Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Thu, 3 Apr 2025 23:09:17 -0500
Subject: [PATCH 04/25] configurando para coneccion con front
---
pom.xml | 4 ---
.../pintudos/game/config/SecurityConfig.java | 33 ++++++++++++-------
.../java/pintudos/game/config/WebConfig.java | 24 ++++++++++++++
.../game/controller/GameController.java | 11 +++++--
.../game/controller/TraceController.java | 3 +-
.../game/controller/WebSocketController.java | 15 ++++++---
.../pintudos/game/model/JoinRoomRequest.java | 23 +++++++++++++
.../game/websocket/WebSocketConfig.java | 13 +++++---
8 files changed, 95 insertions(+), 31 deletions(-)
create mode 100644 src/main/java/pintudos/game/config/WebConfig.java
create mode 100644 src/main/java/pintudos/game/model/JoinRoomRequest.java
diff --git a/pom.xml b/pom.xml
index deb0e44..7033d9b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,10 +38,6 @@
org.springframework.boot
spring-boot-starter-oauth2-client
-
- org.springframework.boot
- spring-boot-starter-security
-
org.springframework.boot
spring-boot-starter-web
diff --git a/src/main/java/pintudos/game/config/SecurityConfig.java b/src/main/java/pintudos/game/config/SecurityConfig.java
index 442b6fe..700ebb8 100644
--- a/src/main/java/pintudos/game/config/SecurityConfig.java
+++ b/src/main/java/pintudos/game/config/SecurityConfig.java
@@ -3,26 +3,35 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
-@EnableWebSecurity
public class SecurityConfig {
@Bean
- public SecurityFilterChain securityFilterChain(HttpSecurity http)
- throws Exception {
- // Desactivamos la seguridad para permitir el acceso sin autenticación
+ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
- .csrf(csrf -> csrf.disable()) // Desactivar CSRF
- .authorizeHttpRequests(requests ->
- requests
- .requestMatchers("/**")
- .permitAll() // Permitir acceso a todas las rutas sin autenticación
+ .cors()
+ .and()
+ .csrf()
+ .disable() // Necesario para SockJS
+ .authorizeHttpRequests(authz ->
+ authz
+ .requestMatchers(
+ "/game/**", // SockJS handshake y WebSocket transport
+ "/ws/**", // Si usas /ws como endpoint de registro STOMP
+ "/topic/**", // Canal de suscripciones
+ "/app/**" // Canal de envío desde el cliente
+ )
+ .permitAll()
.anyRequest()
- .authenticated()
- ); // Las demás rutas requieren autenticación
+ .authenticated() // El resto necesita auth
+ )
+ .formLogin()
+ .disable()
+ .httpBasic()
+ .disable();
+
return http.build();
}
}
diff --git a/src/main/java/pintudos/game/config/WebConfig.java b/src/main/java/pintudos/game/config/WebConfig.java
new file mode 100644
index 0000000..08f9942
--- /dev/null
+++ b/src/main/java/pintudos/game/config/WebConfig.java
@@ -0,0 +1,24 @@
+package pintudos.game.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class WebConfig {
+
+ @Bean
+ public WebMvcConfigurer corsConfigurer() {
+ return new WebMvcConfigurer() {
+ @Override
+ public void addCorsMappings(CorsRegistry registry) {
+ registry
+ .addMapping("/**")
+ .allowedOrigins("http://localhost:5173", "http://localhost:3000") // Especificar frontend
+ .allowedMethods("*")
+ .allowedHeaders("*"); // Habilitar credenciales
+ }
+ };
+ }
+}
diff --git a/src/main/java/pintudos/game/controller/GameController.java b/src/main/java/pintudos/game/controller/GameController.java
index 4f154bb..701ec18 100644
--- a/src/main/java/pintudos/game/controller/GameController.java
+++ b/src/main/java/pintudos/game/controller/GameController.java
@@ -5,7 +5,9 @@
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
import pintudos.game.model.GameRoom;
+import pintudos.game.model.JoinRoomRequest;
import pintudos.game.model.Trace;
import pintudos.game.service.GameRoomService;
import pintudos.game.service.TraceService;
@@ -31,10 +33,13 @@ public void createRoom(String roomId) {
// Unirse a una sala
@MessageMapping("/joinRoom")
- public void joinRoom(String roomId, String player) {
- GameRoom room = gameRoomService.joinRoom(roomId, player);
+ public void joinRoom(JoinRoomRequest request) {
+ GameRoom room = gameRoomService.joinRoom(
+ request.getRoomId(),
+ request.getPlayer()
+ );
if (room != null) {
- messagingTemplate.convertAndSend("/topic/rooms", room); // Enviar la información de la sala a todos los clientes
+ messagingTemplate.convertAndSend("/topic/rooms", room);
}
}
diff --git a/src/main/java/pintudos/game/controller/TraceController.java b/src/main/java/pintudos/game/controller/TraceController.java
index dc861ab..d547b3a 100644
--- a/src/main/java/pintudos/game/controller/TraceController.java
+++ b/src/main/java/pintudos/game/controller/TraceController.java
@@ -7,8 +7,7 @@
import pintudos.game.service.TraceService;
@RestController
-@RequestMapping("/traces")
-@CrossOrigin("*") // Permite peticiones desde cualquier frontend
+@RequestMapping("/traces") // Permite peticiones desde cualquier frontend
public class TraceController {
@Autowired
diff --git a/src/main/java/pintudos/game/controller/WebSocketController.java b/src/main/java/pintudos/game/controller/WebSocketController.java
index 2070c73..a7ccf42 100644
--- a/src/main/java/pintudos/game/controller/WebSocketController.java
+++ b/src/main/java/pintudos/game/controller/WebSocketController.java
@@ -2,8 +2,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.MessageMapping;
-import org.springframework.messaging.handler.annotation.SendTo;
+import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.CrossOrigin;
import pintudos.game.model.Trace;
import pintudos.game.service.TraceService;
@@ -13,12 +14,16 @@ public class WebSocketController {
@Autowired
private TraceService traceService;
- // Recibir un trazo y enviarlo a todos los clientes conectados
+ @Autowired
+ private SimpMessagingTemplate messagingTemplate;
+
@MessageMapping("/trace")
- @SendTo("/topic/traces")
- public Trace sendTrace(Trace trace) throws Exception {
+ public void sendTrace(Trace trace) {
// Guardar el trazo en la base de datos
traceService.saveTrace(trace);
- return trace; // Enviar el trazo a todos los clientes
+
+ // Enviar el trazo a la sala específica
+ String destination = "/topic/sala-" + trace.getRoomId() + "/traces";
+ messagingTemplate.convertAndSend(destination, trace);
}
}
diff --git a/src/main/java/pintudos/game/model/JoinRoomRequest.java b/src/main/java/pintudos/game/model/JoinRoomRequest.java
new file mode 100644
index 0000000..999bb68
--- /dev/null
+++ b/src/main/java/pintudos/game/model/JoinRoomRequest.java
@@ -0,0 +1,23 @@
+package pintudos.game.model;
+
+public class JoinRoomRequest {
+
+ private String roomId;
+ private String player;
+
+ public String getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(String roomId) {
+ this.roomId = roomId;
+ }
+
+ public String getPlayer() {
+ return player;
+ }
+
+ public void setPlayer(String player) {
+ this.player = player;
+ }
+}
diff --git a/src/main/java/pintudos/game/websocket/WebSocketConfig.java b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
index ea40d62..b958324 100644
--- a/src/main/java/pintudos/game/websocket/WebSocketConfig.java
+++ b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
@@ -11,13 +11,16 @@
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
- public void configureMessageBroker(MessageBrokerRegistry config) {
- config.enableSimpleBroker("/topic"); // La cola donde los mensajes serán enviados
- config.setApplicationDestinationPrefixes("/app"); // Prefijo para los endpoints de mensajes
+ public void registerStompEndpoints(StompEndpointRegistry registry) {
+ registry
+ .addEndpoint("/game")
+ .setAllowedOrigins("http://localhost:5173") // frontend
+ .withSockJS(); // Esto activa los endpoints como /info, /websocket, etc.
}
@Override
- public void registerStompEndpoints(StompEndpointRegistry registry) {
- registry.addEndpoint("/game").withSockJS(); // Endpoint de conexión de WebSocket
+ public void configureMessageBroker(MessageBrokerRegistry registry) {
+ registry.enableSimpleBroker("/topic", "/queue");
+ registry.setApplicationDestinationPrefixes("/app");
}
}
From 7f3ddebdbadb23399b1878ff02b5a912acabf9e7 Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Fri, 4 Apr 2025 20:32:10 -0500
Subject: [PATCH 05/25] arreglos para que funcione dibujar
---
.../game/controller/GameController.java | 19 ++++++++++++------
.../game/controller/WebSocketController.java | 12 ++++-------
.../java/pintudos/game/model/GameRoom.java | 4 +++-
.../java/pintudos/game/model/PlayerCount.java | 20 +++++++++++++++++++
.../game/service/GameRoomService.java | 4 +++-
5 files changed, 43 insertions(+), 16 deletions(-)
create mode 100644 src/main/java/pintudos/game/model/PlayerCount.java
diff --git a/src/main/java/pintudos/game/controller/GameController.java b/src/main/java/pintudos/game/controller/GameController.java
index 701ec18..2fc849d 100644
--- a/src/main/java/pintudos/game/controller/GameController.java
+++ b/src/main/java/pintudos/game/controller/GameController.java
@@ -1,6 +1,7 @@
package pintudos.game.controller;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.messaging.handler.annotation.DestinationVariable;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessagingTemplate;
@@ -8,6 +9,7 @@
import org.springframework.web.bind.annotation.CrossOrigin;
import pintudos.game.model.GameRoom;
import pintudos.game.model.JoinRoomRequest;
+import pintudos.game.model.PlayerCount;
import pintudos.game.model.Trace;
import pintudos.game.service.GameRoomService;
import pintudos.game.service.TraceService;
@@ -38,18 +40,23 @@ public void joinRoom(JoinRoomRequest request) {
request.getRoomId(),
request.getPlayer()
);
+
if (room != null) {
+ // Notificar cambios generales de la sala (ya lo haces)
messagingTemplate.convertAndSend("/topic/rooms", room);
+
+ // Enviar número de jugadores a los conectados en esa sala
+ int playerCount = room.getPlayers().size();
+ messagingTemplate.convertAndSend(
+ "/topic/room/" + request.getRoomId() + "/players",
+ new PlayerCount(playerCount)
+ );
}
}
// Recibir un trazo y enviarlo a todos los miembros de la sala
@MessageMapping("/trace/{roomId}")
- @SendTo("/topic/{roomId}/traces")
- public Trace sendTrace(String roomId, Trace trace) {
- // Guardar el trazo en la base de datos
- traceService.saveTrace(trace);
- gameRoomService.addTraceToRoom(roomId, trace); // Guardar el trazo en la sala
- return trace; // Enviar el trazo a todos los jugadores en esa sala
+ public void sendTrace(@DestinationVariable String roomId, Trace trace) {
+ messagingTemplate.convertAndSend("/topic/" + roomId + "/traces", trace);
}
}
diff --git a/src/main/java/pintudos/game/controller/WebSocketController.java b/src/main/java/pintudos/game/controller/WebSocketController.java
index a7ccf42..0a950cb 100644
--- a/src/main/java/pintudos/game/controller/WebSocketController.java
+++ b/src/main/java/pintudos/game/controller/WebSocketController.java
@@ -1,6 +1,7 @@
package pintudos.game.controller;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.messaging.handler.annotation.DestinationVariable;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
@@ -17,13 +18,8 @@ public class WebSocketController {
@Autowired
private SimpMessagingTemplate messagingTemplate;
- @MessageMapping("/trace")
- public void sendTrace(Trace trace) {
- // Guardar el trazo en la base de datos
- traceService.saveTrace(trace);
-
- // Enviar el trazo a la sala específica
- String destination = "/topic/sala-" + trace.getRoomId() + "/traces";
- messagingTemplate.convertAndSend(destination, trace);
+ @MessageMapping("/ws/trace/{roomId}")
+ public void sendTrace(@DestinationVariable String roomId, Trace trace) {
+ messagingTemplate.convertAndSend("/topic/trace/" + roomId, trace);
}
}
diff --git a/src/main/java/pintudos/game/model/GameRoom.java b/src/main/java/pintudos/game/model/GameRoom.java
index 86ff071..8503aa8 100644
--- a/src/main/java/pintudos/game/model/GameRoom.java
+++ b/src/main/java/pintudos/game/model/GameRoom.java
@@ -17,7 +17,9 @@ public GameRoom(String roomId) {
// Métodos para agregar jugadores y trazos
public void addPlayer(String player) {
- players.add(player);
+ if (!players.contains(player)) {
+ players.add(player);
+ }
}
public void removePlayer(String player) {
diff --git a/src/main/java/pintudos/game/model/PlayerCount.java b/src/main/java/pintudos/game/model/PlayerCount.java
new file mode 100644
index 0000000..e375f6a
--- /dev/null
+++ b/src/main/java/pintudos/game/model/PlayerCount.java
@@ -0,0 +1,20 @@
+package pintudos.game.model;
+
+public class PlayerCount {
+
+ private int players;
+
+ public PlayerCount() {}
+
+ public PlayerCount(int players) {
+ this.players = players;
+ }
+
+ public int getPlayers() {
+ return players;
+ }
+
+ public void setPlayers(int players) {
+ this.players = players;
+ }
+}
diff --git a/src/main/java/pintudos/game/service/GameRoomService.java b/src/main/java/pintudos/game/service/GameRoomService.java
index f5f0b34..9321121 100644
--- a/src/main/java/pintudos/game/service/GameRoomService.java
+++ b/src/main/java/pintudos/game/service/GameRoomService.java
@@ -9,7 +9,7 @@
@Service
public class GameRoomService {
- private Map rooms = new HashMap<>();
+ private final Map rooms = new java.util.concurrent.ConcurrentHashMap<>();
// Crear una nueva sala
public GameRoom createRoom(String roomId) {
@@ -22,7 +22,9 @@ public GameRoom createRoom(String roomId) {
public GameRoom joinRoom(String roomId, String player) {
GameRoom room = rooms.get(roomId);
if (room != null) {
+ System.out.println("➡️ Antes de agregar: " + room.getPlayers());
room.addPlayer(player);
+ System.out.println("✅ Después de agregar: " + room.getPlayers());
}
return room;
}
From 52e7056fb6e58970158ec4ff66eebcd6aa7910ea Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Fri, 4 Apr 2025 22:32:13 -0500
Subject: [PATCH 06/25] chatsito
---
.../game/controller/ChatController.java | 60 +++++++++++++++++++
1 file changed, 60 insertions(+)
create mode 100644 src/main/java/pintudos/game/controller/ChatController.java
diff --git a/src/main/java/pintudos/game/controller/ChatController.java b/src/main/java/pintudos/game/controller/ChatController.java
new file mode 100644
index 0000000..3ad9ff1
--- /dev/null
+++ b/src/main/java/pintudos/game/controller/ChatController.java
@@ -0,0 +1,60 @@
+package pintudos.game.controller;
+
+import java.time.LocalDateTime;
+import org.springframework.messaging.handler.annotation.DestinationVariable;
+import org.springframework.messaging.handler.annotation.MessageMapping;
+import org.springframework.messaging.handler.annotation.Payload;
+import org.springframework.messaging.simp.SimpMessagingTemplate;
+import org.springframework.stereotype.Controller;
+
+@Controller
+public class ChatController {
+
+ private final SimpMessagingTemplate messagingTemplate;
+
+ public ChatController(SimpMessagingTemplate messagingTemplate) {
+ this.messagingTemplate = messagingTemplate;
+ }
+
+ public static class ChatMessage {
+
+ private String sender;
+ private String message;
+ private LocalDateTime timestamp;
+
+ // Getters y setters
+
+ public String getSender() {
+ return sender;
+ }
+
+ public void setSender(String sender) {
+ this.sender = sender;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public LocalDateTime getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(LocalDateTime timestamp) {
+ this.timestamp = timestamp;
+ }
+ }
+
+ @MessageMapping("/chat/{roomId}")
+ public void handleChatMessage(
+ @DestinationVariable String roomId,
+ @Payload ChatMessage chatMessage
+ ) {
+ chatMessage.setTimestamp(LocalDateTime.now());
+ messagingTemplate.convertAndSend("/topic/chat/" + roomId, chatMessage);
+ }
+}
From 9736af451e0a71acf7b0de49a0efb5417ea719ca Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Sat, 5 Apr 2025 00:12:59 -0500
Subject: [PATCH 07/25] configurando chat
---
.../game/controller/GameController.java | 10 +++++---
.../game/model/CreateRoomRequest.java | 23 +++++++++++++++++++
.../java/pintudos/game/model/GameRoom.java | 2 +-
.../game/service/GameRoomService.java | 4 ++--
4 files changed, 33 insertions(+), 6 deletions(-)
create mode 100644 src/main/java/pintudos/game/model/CreateRoomRequest.java
diff --git a/src/main/java/pintudos/game/controller/GameController.java b/src/main/java/pintudos/game/controller/GameController.java
index 2fc849d..fb07b95 100644
--- a/src/main/java/pintudos/game/controller/GameController.java
+++ b/src/main/java/pintudos/game/controller/GameController.java
@@ -7,6 +7,7 @@
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
+import pintudos.game.model.CreateRoomRequest;
import pintudos.game.model.GameRoom;
import pintudos.game.model.JoinRoomRequest;
import pintudos.game.model.PlayerCount;
@@ -28,9 +29,12 @@ public class GameController {
// Crear una nueva sala
@MessageMapping("/createRoom")
- public void createRoom(String roomId) {
- GameRoom room = gameRoomService.createRoom(roomId);
- messagingTemplate.convertAndSend("/topic/rooms", room); // Notificar a los clientes sobre la nueva sala
+ public void createRoom(CreateRoomRequest request) {
+ GameRoom room = gameRoomService.createRoom(
+ request.getRoomId(),
+ request.getPlayer()
+ );
+ messagingTemplate.convertAndSend("/topic/rooms", room);
}
// Unirse a una sala
diff --git a/src/main/java/pintudos/game/model/CreateRoomRequest.java b/src/main/java/pintudos/game/model/CreateRoomRequest.java
new file mode 100644
index 0000000..89e6485
--- /dev/null
+++ b/src/main/java/pintudos/game/model/CreateRoomRequest.java
@@ -0,0 +1,23 @@
+package pintudos.game.model;
+
+public class CreateRoomRequest {
+
+ private String roomId;
+ private String player;
+
+ public String getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(String roomId) {
+ this.roomId = roomId;
+ }
+
+ public String getPlayer() {
+ return player;
+ }
+
+ public void setPlayer(String player) {
+ this.player = player;
+ }
+}
diff --git a/src/main/java/pintudos/game/model/GameRoom.java b/src/main/java/pintudos/game/model/GameRoom.java
index 8503aa8..8254c73 100644
--- a/src/main/java/pintudos/game/model/GameRoom.java
+++ b/src/main/java/pintudos/game/model/GameRoom.java
@@ -9,7 +9,7 @@ public class GameRoom {
private List players; // Listado de jugadores conectados
private List traces; // Lista de trazos realizados
- public GameRoom(String roomId) {
+ public GameRoom(String roomId, String player) {
this.roomId = roomId;
this.players = new ArrayList<>();
this.traces = new ArrayList<>();
diff --git a/src/main/java/pintudos/game/service/GameRoomService.java b/src/main/java/pintudos/game/service/GameRoomService.java
index 9321121..f77f7d7 100644
--- a/src/main/java/pintudos/game/service/GameRoomService.java
+++ b/src/main/java/pintudos/game/service/GameRoomService.java
@@ -12,8 +12,8 @@ public class GameRoomService {
private final Map rooms = new java.util.concurrent.ConcurrentHashMap<>();
// Crear una nueva sala
- public GameRoom createRoom(String roomId) {
- GameRoom room = new GameRoom(roomId);
+ public GameRoom createRoom(String roomId, String player) {
+ GameRoom room = new GameRoom(roomId, player);
rooms.put(roomId, room);
return room;
}
From 05a35e27c6ad5265d715ab33d64e1e584a964802 Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Sat, 5 Apr 2025 02:30:01 -0500
Subject: [PATCH 08/25] configuracion para ganar
---
.../game/controller/ChatController.java | 33 ++++++++++++++++++-
.../java/pintudos/game/model/GameRoom.java | 27 +++++++++++++++
2 files changed, 59 insertions(+), 1 deletion(-)
diff --git a/src/main/java/pintudos/game/controller/ChatController.java b/src/main/java/pintudos/game/controller/ChatController.java
index 3ad9ff1..8e9db4a 100644
--- a/src/main/java/pintudos/game/controller/ChatController.java
+++ b/src/main/java/pintudos/game/controller/ChatController.java
@@ -1,17 +1,23 @@
package pintudos.game.controller;
import java.time.LocalDateTime;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.DestinationVariable;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
+import pintudos.game.model.GameRoom;
+import pintudos.game.service.GameRoomService;
@Controller
public class ChatController {
private final SimpMessagingTemplate messagingTemplate;
+ @Autowired
+ private GameRoomService gameRoomService;
+
public ChatController(SimpMessagingTemplate messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}
@@ -55,6 +61,31 @@ public void handleChatMessage(
@Payload ChatMessage chatMessage
) {
chatMessage.setTimestamp(LocalDateTime.now());
- messagingTemplate.convertAndSend("/topic/chat/" + roomId, chatMessage);
+
+ // Obtener la sala actual
+ GameRoom room = gameRoomService.getRoom(roomId);
+ if (room != null) {
+ // Verificar si el mensaje coincide con la palabra a adivinar
+ if (
+ room.getWordToGuess() != null &&
+ room.getWordToGuess().equalsIgnoreCase(chatMessage.getMessage())
+ ) {
+ // Enviar mensaje indicando que alguien ganó
+ ChatMessage winnerMessage = new ChatMessage();
+ winnerMessage.setSender("System");
+ winnerMessage.setMessage(
+ chatMessage.getSender() + " ha adivinado la palabra y ganó!"
+ );
+ winnerMessage.setTimestamp(LocalDateTime.now());
+
+ messagingTemplate.convertAndSend(
+ "/topic/chat/" + roomId,
+ winnerMessage
+ );
+ } else {
+ // Enviar el mensaje normal al chat
+ messagingTemplate.convertAndSend("/topic/chat/" + roomId, chatMessage);
+ }
+ }
}
}
diff --git a/src/main/java/pintudos/game/model/GameRoom.java b/src/main/java/pintudos/game/model/GameRoom.java
index 8254c73..f682447 100644
--- a/src/main/java/pintudos/game/model/GameRoom.java
+++ b/src/main/java/pintudos/game/model/GameRoom.java
@@ -1,18 +1,37 @@
package pintudos.game.model;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
public class GameRoom {
private String roomId;
private List players; // Listado de jugadores conectados
private List traces; // Lista de trazos realizados
+ private String wordToGuess;
+ private String hint; // Pista de la palabra
public GameRoom(String roomId, String player) {
this.roomId = roomId;
this.players = new ArrayList<>();
this.traces = new ArrayList<>();
+ this.players.add("player");
+
+ // Mapa de palabras y pistas
+ Map wordsWithHints = new HashMap<>();
+ wordsWithHints.put("apple", "A red or green fruit.");
+ wordsWithHints.put("banana", "A yellow fruit that monkeys love.");
+ wordsWithHints.put("cherry", "A small red fruit often used as a topping.");
+ wordsWithHints.put("date", "A sweet fruit often found in deserts.");
+ wordsWithHints.put("elderberry", "A dark purple berry used in syrups.");
+
+ // Seleccionar una palabra aleatoria y su pista
+ List keys = new ArrayList<>(wordsWithHints.keySet());
+ String randomWord = keys.get((int) (Math.random() * keys.size()));
+ this.wordToGuess = randomWord;
+ this.hint = wordsWithHints.get(randomWord);
}
// Métodos para agregar jugadores y trazos
@@ -42,4 +61,12 @@ public List getPlayers() {
public List getTraces() {
return traces;
}
+
+ public String getWordToGuess() {
+ return wordToGuess;
+ }
+
+ public String getHint() {
+ return hint;
+ }
}
From 940960a0dd38a7e894c14ff20cb01f7fd8f0ecc2 Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Sat, 5 Apr 2025 05:25:30 -0500
Subject: [PATCH 09/25] ultimando detalles
---
.../game/controller/ChatController.java | 21 +++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/src/main/java/pintudos/game/controller/ChatController.java b/src/main/java/pintudos/game/controller/ChatController.java
index 8e9db4a..5e50186 100644
--- a/src/main/java/pintudos/game/controller/ChatController.java
+++ b/src/main/java/pintudos/game/controller/ChatController.java
@@ -88,4 +88,25 @@ public void handleChatMessage(
}
}
}
+
+ @MessageMapping("/hint/{roomId}")
+ public void handleHintRequest(
+ @DestinationVariable String roomId,
+ @Payload String playerName
+ ) {
+ // Obtener la sala actual
+ GameRoom room = gameRoomService.getRoom(roomId);
+ if (room != null && room.getHint() != null) {
+ // Crear un mensaje para enviar la pista
+ ChatMessage hintMessage = new ChatMessage();
+ hintMessage.setSender("System");
+ hintMessage.setMessage(
+ playerName + " solicitó la pista: " + room.getHint()
+ );
+ hintMessage.setTimestamp(LocalDateTime.now());
+
+ // Enviar el mensaje al chat de la sala
+ messagingTemplate.convertAndSend("/topic/chat/" + roomId, hintMessage);
+ }
+ }
}
From de1631c272359610bc7e2b3bc1903a445d128159 Mon Sep 17 00:00:00 2001
From: Lattes_and_Cream
Date: Sat, 5 Apr 2025 09:47:18 -0500
Subject: [PATCH 10/25] IP EC2 front
---
src/main/java/pintudos/game/config/WebConfig.java | 2 +-
src/main/java/pintudos/game/websocket/WebSocketConfig.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/pintudos/game/config/WebConfig.java b/src/main/java/pintudos/game/config/WebConfig.java
index 08f9942..d2bdde0 100644
--- a/src/main/java/pintudos/game/config/WebConfig.java
+++ b/src/main/java/pintudos/game/config/WebConfig.java
@@ -15,7 +15,7 @@ public WebMvcConfigurer corsConfigurer() {
public void addCorsMappings(CorsRegistry registry) {
registry
.addMapping("/**")
- .allowedOrigins("http://localhost:5173", "http://localhost:3000") // Especificar frontend
+ .allowedOrigins("http://54.211.95.252/:5173", "http://54.211.95.252/:3000") // Especificar frontend
.allowedMethods("*")
.allowedHeaders("*"); // Habilitar credenciales
}
diff --git a/src/main/java/pintudos/game/websocket/WebSocketConfig.java b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
index b958324..508caf0 100644
--- a/src/main/java/pintudos/game/websocket/WebSocketConfig.java
+++ b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
@@ -14,7 +14,7 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry
.addEndpoint("/game")
- .setAllowedOrigins("http://localhost:5173") // frontend
+ .setAllowedOrigins("http://54.211.95.252/:5173") // frontend
.withSockJS(); // Esto activa los endpoints como /info, /websocket, etc.
}
From d35b51a0d38890e73102287140b1534de80477b5 Mon Sep 17 00:00:00 2001
From: Lattes_and_Cream
Date: Sat, 5 Apr 2025 09:55:10 -0500
Subject: [PATCH 11/25] Correcion direccion ip para cors
---
src/main/java/pintudos/game/config/WebConfig.java | 2 +-
src/main/java/pintudos/game/websocket/WebSocketConfig.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/pintudos/game/config/WebConfig.java b/src/main/java/pintudos/game/config/WebConfig.java
index d2bdde0..18fe0de 100644
--- a/src/main/java/pintudos/game/config/WebConfig.java
+++ b/src/main/java/pintudos/game/config/WebConfig.java
@@ -15,7 +15,7 @@ public WebMvcConfigurer corsConfigurer() {
public void addCorsMappings(CorsRegistry registry) {
registry
.addMapping("/**")
- .allowedOrigins("http://54.211.95.252/:5173", "http://54.211.95.252/:3000") // Especificar frontend
+ .allowedOrigins("http://54.211.95.252:5173", "http://54.211.95.252:3000") // Especificar frontend
.allowedMethods("*")
.allowedHeaders("*"); // Habilitar credenciales
}
diff --git a/src/main/java/pintudos/game/websocket/WebSocketConfig.java b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
index 508caf0..b733f7e 100644
--- a/src/main/java/pintudos/game/websocket/WebSocketConfig.java
+++ b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
@@ -14,7 +14,7 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry
.addEndpoint("/game")
- .setAllowedOrigins("http://54.211.95.252/:5173") // frontend
+ .setAllowedOrigins("http://54.211.95.252:5173") // frontend
.withSockJS(); // Esto activa los endpoints como /info, /websocket, etc.
}
From fe0d0c794ff87caac3ca3598aaccb0623f487f9e Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Sat, 5 Apr 2025 12:52:22 -0500
Subject: [PATCH 12/25] ultimos
---
pom.xml | 2 +-
src/main/java/pintudos/game/config/WebConfig.java | 2 +-
.../pintudos/game/controller/ChatController.java | 14 ++++++++++++++
.../pintudos/game/websocket/WebSocketConfig.java | 2 +-
4 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/pom.xml b/pom.xml
index 7033d9b..738e9d5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,7 +27,7 @@
- 21
+ 17
diff --git a/src/main/java/pintudos/game/config/WebConfig.java b/src/main/java/pintudos/game/config/WebConfig.java
index 18fe0de..08f9942 100644
--- a/src/main/java/pintudos/game/config/WebConfig.java
+++ b/src/main/java/pintudos/game/config/WebConfig.java
@@ -15,7 +15,7 @@ public WebMvcConfigurer corsConfigurer() {
public void addCorsMappings(CorsRegistry registry) {
registry
.addMapping("/**")
- .allowedOrigins("http://54.211.95.252:5173", "http://54.211.95.252:3000") // Especificar frontend
+ .allowedOrigins("http://localhost:5173", "http://localhost:3000") // Especificar frontend
.allowedMethods("*")
.allowedHeaders("*"); // Habilitar credenciales
}
diff --git a/src/main/java/pintudos/game/controller/ChatController.java b/src/main/java/pintudos/game/controller/ChatController.java
index 5e50186..94495b6 100644
--- a/src/main/java/pintudos/game/controller/ChatController.java
+++ b/src/main/java/pintudos/game/controller/ChatController.java
@@ -7,6 +7,10 @@
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.ResponseBody;
+
import pintudos.game.model.GameRoom;
import pintudos.game.service.GameRoomService;
@@ -109,4 +113,14 @@ public void handleHintRequest(
messagingTemplate.convertAndSend("/topic/chat/" + roomId, hintMessage);
}
}
+ @GetMapping("/game/{roomId}/secret-word")
+ @ResponseBody
+ public String getSecretWord(@PathVariable String roomId) {
+ GameRoom room = gameRoomService.getRoom(roomId);
+ if (room != null) {
+ return room.getWordToGuess();
+ }
+ return "Room not found";
+ }
+
}
diff --git a/src/main/java/pintudos/game/websocket/WebSocketConfig.java b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
index b733f7e..b958324 100644
--- a/src/main/java/pintudos/game/websocket/WebSocketConfig.java
+++ b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
@@ -14,7 +14,7 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry
.addEndpoint("/game")
- .setAllowedOrigins("http://54.211.95.252:5173") // frontend
+ .setAllowedOrigins("http://localhost:5173") // frontend
.withSockJS(); // Esto activa los endpoints como /info, /websocket, etc.
}
From 0b1d21a415e4eee3e37aaa03f26d726d59d64823 Mon Sep 17 00:00:00 2001
From: Lattes_and_Cream
Date: Sat, 5 Apr 2025 12:58:53 -0500
Subject: [PATCH 13/25] AWS EC2
---
src/main/java/pintudos/game/config/WebConfig.java | 2 +-
src/main/java/pintudos/game/websocket/WebSocketConfig.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/pintudos/game/config/WebConfig.java b/src/main/java/pintudos/game/config/WebConfig.java
index 08f9942..ecbc018 100644
--- a/src/main/java/pintudos/game/config/WebConfig.java
+++ b/src/main/java/pintudos/game/config/WebConfig.java
@@ -15,7 +15,7 @@ public WebMvcConfigurer corsConfigurer() {
public void addCorsMappings(CorsRegistry registry) {
registry
.addMapping("/**")
- .allowedOrigins("http://localhost:5173", "http://localhost:3000") // Especificar frontend
+ .allowedOrigins("http://3.86.110.183:5173", "http://3.86.110.183:3000") // Especificar frontend
.allowedMethods("*")
.allowedHeaders("*"); // Habilitar credenciales
}
diff --git a/src/main/java/pintudos/game/websocket/WebSocketConfig.java b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
index b958324..6cba2e5 100644
--- a/src/main/java/pintudos/game/websocket/WebSocketConfig.java
+++ b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
@@ -14,7 +14,7 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry
.addEndpoint("/game")
- .setAllowedOrigins("http://localhost:5173") // frontend
+ .setAllowedOrigins("http://3.86.110.183:5173") // frontend
.withSockJS(); // Esto activa los endpoints como /info, /websocket, etc.
}
From 8da5f85293772d49f2410505d5173650afeb0b78 Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Mon, 12 May 2025 19:38:13 -0500
Subject: [PATCH 14/25] arreglos pista
---
.../java/pintudos/game/config/WebConfig.java | 2 +-
.../game/controller/ChatController.java | 20 +++++++++++++++++--
.../java/pintudos/game/model/GameRoom.java | 10 ++++++++++
.../game/websocket/WebSocketConfig.java | 2 +-
4 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/src/main/java/pintudos/game/config/WebConfig.java b/src/main/java/pintudos/game/config/WebConfig.java
index ecbc018..08f9942 100644
--- a/src/main/java/pintudos/game/config/WebConfig.java
+++ b/src/main/java/pintudos/game/config/WebConfig.java
@@ -15,7 +15,7 @@ public WebMvcConfigurer corsConfigurer() {
public void addCorsMappings(CorsRegistry registry) {
registry
.addMapping("/**")
- .allowedOrigins("http://3.86.110.183:5173", "http://3.86.110.183:3000") // Especificar frontend
+ .allowedOrigins("http://localhost:5173", "http://localhost:3000") // Especificar frontend
.allowedMethods("*")
.allowedHeaders("*"); // Habilitar credenciales
}
diff --git a/src/main/java/pintudos/game/controller/ChatController.java b/src/main/java/pintudos/game/controller/ChatController.java
index 94495b6..0adb5d9 100644
--- a/src/main/java/pintudos/game/controller/ChatController.java
+++ b/src/main/java/pintudos/game/controller/ChatController.java
@@ -2,6 +2,8 @@
import java.time.LocalDateTime;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
import org.springframework.messaging.handler.annotation.DestinationVariable;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.Payload;
@@ -10,7 +12,6 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;
-
import pintudos.game.model.GameRoom;
import pintudos.game.service.GameRoomService;
@@ -113,6 +114,7 @@ public void handleHintRequest(
messagingTemplate.convertAndSend("/topic/chat/" + roomId, hintMessage);
}
}
+
@GetMapping("/game/{roomId}/secret-word")
@ResponseBody
public String getSecretWord(@PathVariable String roomId) {
@@ -122,5 +124,19 @@ public String getSecretWord(@PathVariable String roomId) {
}
return "Room not found";
}
-
+
+ @GetMapping("/game/{roomId}/clue")
+ public ResponseEntity getClue(@PathVariable String roomId) {
+ // Aquí se asegura de que solo el primer jugador que haga la solicitud obtenga la pista
+ // Si ya se ha enviado la pista, se puede devolver un error o un mensaje indicando que ya fue entregada
+ GameRoom room = gameRoomService.getRoom(roomId);
+ if (room.isClueAlreadyGiven()) {
+ return ResponseEntity.ok("La pista ya ha sido entregada a otro jugador.");
+ }
+
+ // Marca la pista como entregada para la sala
+ room.markClueAsGiven();
+
+ return ResponseEntity.ok(room.getHint());
+ }
}
diff --git a/src/main/java/pintudos/game/model/GameRoom.java b/src/main/java/pintudos/game/model/GameRoom.java
index f682447..6b74d23 100644
--- a/src/main/java/pintudos/game/model/GameRoom.java
+++ b/src/main/java/pintudos/game/model/GameRoom.java
@@ -12,6 +12,7 @@ public class GameRoom {
private List traces; // Lista de trazos realizados
private String wordToGuess;
private String hint; // Pista de la palabra
+ private boolean clueAlreadyGiven; // Indica si la pista ya fue dada
public GameRoom(String roomId, String player) {
this.roomId = roomId;
@@ -32,6 +33,7 @@ public GameRoom(String roomId, String player) {
String randomWord = keys.get((int) (Math.random() * keys.size()));
this.wordToGuess = randomWord;
this.hint = wordsWithHints.get(randomWord);
+ clueAlreadyGiven = false; // Inicialmente, la pista no ha sido dada
}
// Métodos para agregar jugadores y trazos
@@ -69,4 +71,12 @@ public String getWordToGuess() {
public String getHint() {
return hint;
}
+
+ public boolean isClueAlreadyGiven() {
+ return clueAlreadyGiven;
+ }
+
+ public void markClueAsGiven() {
+ this.clueAlreadyGiven = true;
+ }
}
diff --git a/src/main/java/pintudos/game/websocket/WebSocketConfig.java b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
index 6cba2e5..b958324 100644
--- a/src/main/java/pintudos/game/websocket/WebSocketConfig.java
+++ b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
@@ -14,7 +14,7 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry
.addEndpoint("/game")
- .setAllowedOrigins("http://3.86.110.183:5173") // frontend
+ .setAllowedOrigins("http://localhost:5173") // frontend
.withSockJS(); // Esto activa los endpoints como /info, /websocket, etc.
}
From 46a022604481c8628ca14d679f2e292828c9e9c4 Mon Sep 17 00:00:00 2001
From: Juan <112003348+juanescan@users.noreply.github.com>
Date: Mon, 19 May 2025 16:20:16 -0500
Subject: [PATCH 15/25] cifrado sirviendo
---
.../game/controller/GameController.java | 25 +++++++++++++++--
.../pintudos/game/security/AESCipher.java | 28 +++++++++++++++++++
.../java/pintudos/game/AESCipherTest.java | 21 ++++++++++++++
3 files changed, 71 insertions(+), 3 deletions(-)
create mode 100644 src/main/java/pintudos/game/security/AESCipher.java
create mode 100644 src/test/java/pintudos/game/AESCipherTest.java
diff --git a/src/main/java/pintudos/game/controller/GameController.java b/src/main/java/pintudos/game/controller/GameController.java
index fb07b95..cc176dc 100644
--- a/src/main/java/pintudos/game/controller/GameController.java
+++ b/src/main/java/pintudos/game/controller/GameController.java
@@ -12,8 +12,11 @@
import pintudos.game.model.JoinRoomRequest;
import pintudos.game.model.PlayerCount;
import pintudos.game.model.Trace;
+import pintudos.game.security.AESCipher;
import pintudos.game.service.GameRoomService;
import pintudos.game.service.TraceService;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
@Controller
public class GameController {
@@ -26,6 +29,7 @@ public class GameController {
@Autowired
private SimpMessagingTemplate messagingTemplate;
+ private final ObjectMapper objectMapper = new ObjectMapper();
// Crear una nueva sala
@MessageMapping("/createRoom")
@@ -59,8 +63,23 @@ public void joinRoom(JoinRoomRequest request) {
}
// Recibir un trazo y enviarlo a todos los miembros de la sala
- @MessageMapping("/trace/{roomId}")
- public void sendTrace(@DestinationVariable String roomId, Trace trace) {
- messagingTemplate.convertAndSend("/topic/" + roomId + "/traces", trace);
+ @MessageMapping("/trace/{roomId}")
+ public void sendTrace(@DestinationVariable String roomId, String encryptedTraceJson) throws Exception {
+ // Primero descifrar el mensaje recibido
+ String decryptedJson = AESCipher.decrypt(encryptedTraceJson);
+
+ // Convertir JSON a objeto Trace
+ Trace trace = objectMapper.readValue(decryptedJson, Trace.class);
+
+ // (Opcional) Procesar el trace si quieres
+
+ // Convertir objeto Trace a JSON
+ String traceJson = objectMapper.writeValueAsString(trace);
+
+ // Cifrar JSON para enviar a clientes
+ String encryptedToSend = AESCipher.encrypt(traceJson);
+
+ // Enviar mensaje cifrado a los clientes suscritos
+ messagingTemplate.convertAndSend("/topic/" + roomId + "/traces", encryptedToSend);
}
}
diff --git a/src/main/java/pintudos/game/security/AESCipher.java b/src/main/java/pintudos/game/security/AESCipher.java
new file mode 100644
index 0000000..949c8d8
--- /dev/null
+++ b/src/main/java/pintudos/game/security/AESCipher.java
@@ -0,0 +1,28 @@
+package pintudos.game.security;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.Base64;
+
+public class AESCipher {
+ private static final String AES_ALGORITHM = "AES";
+ private static final String AES_KEY = "1234567890123456"; // 16 bytes (128 bits)
+
+ // Método para cifrar texto
+ public static String encrypt(String data) throws Exception {
+ SecretKeySpec key = new SecretKeySpec(AES_KEY.getBytes(), AES_ALGORITHM);
+ Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
+ cipher.init(Cipher.ENCRYPT_MODE, key);
+ byte[] encrypted = cipher.doFinal(data.getBytes());
+ return Base64.getEncoder().encodeToString(encrypted);
+ }
+
+ // Método para descifrar texto
+ public static String decrypt(String encryptedData) throws Exception {
+ SecretKeySpec key = new SecretKeySpec(AES_KEY.getBytes(), AES_ALGORITHM);
+ Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
+ cipher.init(Cipher.DECRYPT_MODE, key);
+ byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
+ return new String(decrypted);
+ }
+}
diff --git a/src/test/java/pintudos/game/AESCipherTest.java b/src/test/java/pintudos/game/AESCipherTest.java
new file mode 100644
index 0000000..f71622c
--- /dev/null
+++ b/src/test/java/pintudos/game/AESCipherTest.java
@@ -0,0 +1,21 @@
+package pintudos.game;
+
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.*;
+import pintudos.game.security.AESCipher;
+
+public class AESCipherTest {
+
+ @Test
+ public void testEncryptDecrypt() throws Exception {
+ String original = "hola";
+
+ String encrypted = AESCipher.encrypt(original);
+ assertNotNull(encrypted);
+ System.out.println("Encrypted: " + encrypted);
+
+ String decrypted = AESCipher.decrypt(encrypted);
+ assertEquals(original, decrypted);
+ System.out.println("Decrypted: " + decrypted);
+ }
+}
From 9066be8471699b8c846330d75f4079df63843c06 Mon Sep 17 00:00:00 2001
From: Juan <112003348+juanescan@users.noreply.github.com>
Date: Mon, 19 May 2025 17:59:17 -0500
Subject: [PATCH 16/25] reseteo
---
.../java/pintudos/game/controller/ChatController.java | 2 ++
src/main/java/pintudos/game/model/GameRoom.java | 10 ++++++++++
.../java/pintudos/game/websocket/WebSocketConfig.java | 2 +-
3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/main/java/pintudos/game/controller/ChatController.java b/src/main/java/pintudos/game/controller/ChatController.java
index 94495b6..c8e07b9 100644
--- a/src/main/java/pintudos/game/controller/ChatController.java
+++ b/src/main/java/pintudos/game/controller/ChatController.java
@@ -2,6 +2,8 @@
import java.time.LocalDateTime;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
import org.springframework.messaging.handler.annotation.DestinationVariable;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.Payload;
diff --git a/src/main/java/pintudos/game/model/GameRoom.java b/src/main/java/pintudos/game/model/GameRoom.java
index f682447..6b74d23 100644
--- a/src/main/java/pintudos/game/model/GameRoom.java
+++ b/src/main/java/pintudos/game/model/GameRoom.java
@@ -12,6 +12,7 @@ public class GameRoom {
private List traces; // Lista de trazos realizados
private String wordToGuess;
private String hint; // Pista de la palabra
+ private boolean clueAlreadyGiven; // Indica si la pista ya fue dada
public GameRoom(String roomId, String player) {
this.roomId = roomId;
@@ -32,6 +33,7 @@ public GameRoom(String roomId, String player) {
String randomWord = keys.get((int) (Math.random() * keys.size()));
this.wordToGuess = randomWord;
this.hint = wordsWithHints.get(randomWord);
+ clueAlreadyGiven = false; // Inicialmente, la pista no ha sido dada
}
// Métodos para agregar jugadores y trazos
@@ -69,4 +71,12 @@ public String getWordToGuess() {
public String getHint() {
return hint;
}
+
+ public boolean isClueAlreadyGiven() {
+ return clueAlreadyGiven;
+ }
+
+ public void markClueAsGiven() {
+ this.clueAlreadyGiven = true;
+ }
}
diff --git a/src/main/java/pintudos/game/websocket/WebSocketConfig.java b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
index 6cba2e5..b0feb2a 100644
--- a/src/main/java/pintudos/game/websocket/WebSocketConfig.java
+++ b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
@@ -14,7 +14,7 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry
.addEndpoint("/game")
- .setAllowedOrigins("http://3.86.110.183:5173") // frontend
+ .setAllowedOrigins("http://localhost:5173", "http://localhost:3000") // Especificar frontend
.withSockJS(); // Esto activa los endpoints como /info, /websocket, etc.
}
From ab93f93f97b52378be79dca4f803c3ebca26edbd Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Mon, 12 May 2025 19:38:13 -0500
Subject: [PATCH 17/25] arreglos pista
---
.../java/pintudos/game/config/WebConfig.java | 2 +-
.../game/controller/ChatController.java | 18 ++++++++++++++++--
.../game/websocket/WebSocketConfig.java | 2 +-
3 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/src/main/java/pintudos/game/config/WebConfig.java b/src/main/java/pintudos/game/config/WebConfig.java
index ecbc018..08f9942 100644
--- a/src/main/java/pintudos/game/config/WebConfig.java
+++ b/src/main/java/pintudos/game/config/WebConfig.java
@@ -15,7 +15,7 @@ public WebMvcConfigurer corsConfigurer() {
public void addCorsMappings(CorsRegistry registry) {
registry
.addMapping("/**")
- .allowedOrigins("http://3.86.110.183:5173", "http://3.86.110.183:3000") // Especificar frontend
+ .allowedOrigins("http://localhost:5173", "http://localhost:3000") // Especificar frontend
.allowedMethods("*")
.allowedHeaders("*"); // Habilitar credenciales
}
diff --git a/src/main/java/pintudos/game/controller/ChatController.java b/src/main/java/pintudos/game/controller/ChatController.java
index c8e07b9..0adb5d9 100644
--- a/src/main/java/pintudos/game/controller/ChatController.java
+++ b/src/main/java/pintudos/game/controller/ChatController.java
@@ -12,7 +12,6 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;
-
import pintudos.game.model.GameRoom;
import pintudos.game.service.GameRoomService;
@@ -115,6 +114,7 @@ public void handleHintRequest(
messagingTemplate.convertAndSend("/topic/chat/" + roomId, hintMessage);
}
}
+
@GetMapping("/game/{roomId}/secret-word")
@ResponseBody
public String getSecretWord(@PathVariable String roomId) {
@@ -124,5 +124,19 @@ public String getSecretWord(@PathVariable String roomId) {
}
return "Room not found";
}
-
+
+ @GetMapping("/game/{roomId}/clue")
+ public ResponseEntity getClue(@PathVariable String roomId) {
+ // Aquí se asegura de que solo el primer jugador que haga la solicitud obtenga la pista
+ // Si ya se ha enviado la pista, se puede devolver un error o un mensaje indicando que ya fue entregada
+ GameRoom room = gameRoomService.getRoom(roomId);
+ if (room.isClueAlreadyGiven()) {
+ return ResponseEntity.ok("La pista ya ha sido entregada a otro jugador.");
+ }
+
+ // Marca la pista como entregada para la sala
+ room.markClueAsGiven();
+
+ return ResponseEntity.ok(room.getHint());
+ }
}
diff --git a/src/main/java/pintudos/game/websocket/WebSocketConfig.java b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
index b0feb2a..b958324 100644
--- a/src/main/java/pintudos/game/websocket/WebSocketConfig.java
+++ b/src/main/java/pintudos/game/websocket/WebSocketConfig.java
@@ -14,7 +14,7 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry
.addEndpoint("/game")
- .setAllowedOrigins("http://localhost:5173", "http://localhost:3000") // Especificar frontend
+ .setAllowedOrigins("http://localhost:5173") // frontend
.withSockJS(); // Esto activa los endpoints como /info, /websocket, etc.
}
From ac796fa232ca2a2b41d07652124ad65f38503d47 Mon Sep 17 00:00:00 2001
From: Juan <112003348+juanescan@users.noreply.github.com>
Date: Mon, 19 May 2025 18:46:57 -0500
Subject: [PATCH 18/25] Revert "reseteo"
---
.../game/controller/GameController.java | 24 ++++---------------
.../java/pintudos/game/model/GameRoom.java | 5 ++--
2 files changed, 6 insertions(+), 23 deletions(-)
diff --git a/src/main/java/pintudos/game/controller/GameController.java b/src/main/java/pintudos/game/controller/GameController.java
index cc176dc..b12bc14 100644
--- a/src/main/java/pintudos/game/controller/GameController.java
+++ b/src/main/java/pintudos/game/controller/GameController.java
@@ -63,23 +63,7 @@ public void joinRoom(JoinRoomRequest request) {
}
// Recibir un trazo y enviarlo a todos los miembros de la sala
- @MessageMapping("/trace/{roomId}")
- public void sendTrace(@DestinationVariable String roomId, String encryptedTraceJson) throws Exception {
- // Primero descifrar el mensaje recibido
- String decryptedJson = AESCipher.decrypt(encryptedTraceJson);
-
- // Convertir JSON a objeto Trace
- Trace trace = objectMapper.readValue(decryptedJson, Trace.class);
-
- // (Opcional) Procesar el trace si quieres
-
- // Convertir objeto Trace a JSON
- String traceJson = objectMapper.writeValueAsString(trace);
-
- // Cifrar JSON para enviar a clientes
- String encryptedToSend = AESCipher.encrypt(traceJson);
-
- // Enviar mensaje cifrado a los clientes suscritos
- messagingTemplate.convertAndSend("/topic/" + roomId + "/traces", encryptedToSend);
- }
-}
+ @MessageMapping("/trace/{roomId}")
+ public void sendTrace(@DestinationVariable String roomId, Trace trace) {
+ messagingTemplate.convertAndSend("/topic/" + roomId + "/traces", trace);
+}}
diff --git a/src/main/java/pintudos/game/model/GameRoom.java b/src/main/java/pintudos/game/model/GameRoom.java
index 6b74d23..b797eb0 100644
--- a/src/main/java/pintudos/game/model/GameRoom.java
+++ b/src/main/java/pintudos/game/model/GameRoom.java
@@ -19,6 +19,7 @@ public GameRoom(String roomId, String player) {
this.players = new ArrayList<>();
this.traces = new ArrayList<>();
this.players.add("player");
+ clueAlreadyGiven = false; // Inicialmente, la pista no ha sido dada
// Mapa de palabras y pistas
Map wordsWithHints = new HashMap<>();
@@ -33,7 +34,6 @@ public GameRoom(String roomId, String player) {
String randomWord = keys.get((int) (Math.random() * keys.size()));
this.wordToGuess = randomWord;
this.hint = wordsWithHints.get(randomWord);
- clueAlreadyGiven = false; // Inicialmente, la pista no ha sido dada
}
// Métodos para agregar jugadores y trazos
@@ -71,8 +71,7 @@ public String getWordToGuess() {
public String getHint() {
return hint;
}
-
- public boolean isClueAlreadyGiven() {
+ public boolean isClueAlreadyGiven() {
return clueAlreadyGiven;
}
From d35cd4a3fd1e29080c80f08e6b9cd783b9f8682d Mon Sep 17 00:00:00 2001
From: Juan <112003348+juanescan@users.noreply.github.com>
Date: Mon, 19 May 2025 19:23:39 -0500
Subject: [PATCH 19/25] funcipnando
---
.../game/controller/GameController.java | 1 -
.../pintudos/game/security/AESCipher.java | 28 -------------------
.../java/pintudos/game/AESCipherTest.java | 21 --------------
3 files changed, 50 deletions(-)
delete mode 100644 src/main/java/pintudos/game/security/AESCipher.java
delete mode 100644 src/test/java/pintudos/game/AESCipherTest.java
diff --git a/src/main/java/pintudos/game/controller/GameController.java b/src/main/java/pintudos/game/controller/GameController.java
index b12bc14..c52fa31 100644
--- a/src/main/java/pintudos/game/controller/GameController.java
+++ b/src/main/java/pintudos/game/controller/GameController.java
@@ -12,7 +12,6 @@
import pintudos.game.model.JoinRoomRequest;
import pintudos.game.model.PlayerCount;
import pintudos.game.model.Trace;
-import pintudos.game.security.AESCipher;
import pintudos.game.service.GameRoomService;
import pintudos.game.service.TraceService;
import com.fasterxml.jackson.databind.ObjectMapper;
diff --git a/src/main/java/pintudos/game/security/AESCipher.java b/src/main/java/pintudos/game/security/AESCipher.java
deleted file mode 100644
index 949c8d8..0000000
--- a/src/main/java/pintudos/game/security/AESCipher.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package pintudos.game.security;
-
-import javax.crypto.Cipher;
-import javax.crypto.spec.SecretKeySpec;
-import java.util.Base64;
-
-public class AESCipher {
- private static final String AES_ALGORITHM = "AES";
- private static final String AES_KEY = "1234567890123456"; // 16 bytes (128 bits)
-
- // Método para cifrar texto
- public static String encrypt(String data) throws Exception {
- SecretKeySpec key = new SecretKeySpec(AES_KEY.getBytes(), AES_ALGORITHM);
- Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
- cipher.init(Cipher.ENCRYPT_MODE, key);
- byte[] encrypted = cipher.doFinal(data.getBytes());
- return Base64.getEncoder().encodeToString(encrypted);
- }
-
- // Método para descifrar texto
- public static String decrypt(String encryptedData) throws Exception {
- SecretKeySpec key = new SecretKeySpec(AES_KEY.getBytes(), AES_ALGORITHM);
- Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
- cipher.init(Cipher.DECRYPT_MODE, key);
- byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
- return new String(decrypted);
- }
-}
diff --git a/src/test/java/pintudos/game/AESCipherTest.java b/src/test/java/pintudos/game/AESCipherTest.java
deleted file mode 100644
index f71622c..0000000
--- a/src/test/java/pintudos/game/AESCipherTest.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package pintudos.game;
-
-import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.*;
-import pintudos.game.security.AESCipher;
-
-public class AESCipherTest {
-
- @Test
- public void testEncryptDecrypt() throws Exception {
- String original = "hola";
-
- String encrypted = AESCipher.encrypt(original);
- assertNotNull(encrypted);
- System.out.println("Encrypted: " + encrypted);
-
- String decrypted = AESCipher.decrypt(encrypted);
- assertEquals(original, decrypted);
- System.out.println("Decrypted: " + decrypted);
- }
-}
From 54888e6791a70f851a58d330226455602d153966 Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Wed, 21 May 2025 11:21:04 -0500
Subject: [PATCH 20/25] fix duplicate lines
---
.../pintudos/game/model/JoinRoomRequest.java | 23 -------------------
...reateRoomRequest.java => RoomRequest.java} | 0
2 files changed, 23 deletions(-)
delete mode 100644 src/main/java/pintudos/game/model/JoinRoomRequest.java
rename src/main/java/pintudos/game/model/{CreateRoomRequest.java => RoomRequest.java} (100%)
diff --git a/src/main/java/pintudos/game/model/JoinRoomRequest.java b/src/main/java/pintudos/game/model/JoinRoomRequest.java
deleted file mode 100644
index 999bb68..0000000
--- a/src/main/java/pintudos/game/model/JoinRoomRequest.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package pintudos.game.model;
-
-public class JoinRoomRequest {
-
- private String roomId;
- private String player;
-
- public String getRoomId() {
- return roomId;
- }
-
- public void setRoomId(String roomId) {
- this.roomId = roomId;
- }
-
- public String getPlayer() {
- return player;
- }
-
- public void setPlayer(String player) {
- this.player = player;
- }
-}
diff --git a/src/main/java/pintudos/game/model/CreateRoomRequest.java b/src/main/java/pintudos/game/model/RoomRequest.java
similarity index 100%
rename from src/main/java/pintudos/game/model/CreateRoomRequest.java
rename to src/main/java/pintudos/game/model/RoomRequest.java
From 177fd775378f584b238a34749ff6d729cf3b0b17 Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Wed, 21 May 2025 11:26:53 -0500
Subject: [PATCH 21/25] fix
---
.../java/pintudos/game/controller/GameController.java | 9 +++------
src/main/java/pintudos/game/model/RoomRequest.java | 2 +-
2 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/src/main/java/pintudos/game/controller/GameController.java b/src/main/java/pintudos/game/controller/GameController.java
index fb07b95..ee4f20e 100644
--- a/src/main/java/pintudos/game/controller/GameController.java
+++ b/src/main/java/pintudos/game/controller/GameController.java
@@ -3,14 +3,11 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.DestinationVariable;
import org.springframework.messaging.handler.annotation.MessageMapping;
-import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import pintudos.game.model.CreateRoomRequest;
import pintudos.game.model.GameRoom;
-import pintudos.game.model.JoinRoomRequest;
import pintudos.game.model.PlayerCount;
+import pintudos.game.model.RoomRequest;
import pintudos.game.model.Trace;
import pintudos.game.service.GameRoomService;
import pintudos.game.service.TraceService;
@@ -29,7 +26,7 @@ public class GameController {
// Crear una nueva sala
@MessageMapping("/createRoom")
- public void createRoom(CreateRoomRequest request) {
+ public void createRoom(RoomRequest request) {
GameRoom room = gameRoomService.createRoom(
request.getRoomId(),
request.getPlayer()
@@ -39,7 +36,7 @@ public void createRoom(CreateRoomRequest request) {
// Unirse a una sala
@MessageMapping("/joinRoom")
- public void joinRoom(JoinRoomRequest request) {
+ public void joinRoom(RoomRequest request) {
GameRoom room = gameRoomService.joinRoom(
request.getRoomId(),
request.getPlayer()
diff --git a/src/main/java/pintudos/game/model/RoomRequest.java b/src/main/java/pintudos/game/model/RoomRequest.java
index 89e6485..de6ff81 100644
--- a/src/main/java/pintudos/game/model/RoomRequest.java
+++ b/src/main/java/pintudos/game/model/RoomRequest.java
@@ -1,6 +1,6 @@
package pintudos.game.model;
-public class CreateRoomRequest {
+public class RoomRequest {
private String roomId;
private String player;
From 3925c42471173fe75f39ee3796301df2c8a0d08e Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Wed, 21 May 2025 11:51:28 -0500
Subject: [PATCH 22/25] fix tracer dto
---
.../game/controller/TraceController.java | 9 ++-
.../java/pintudos/game/model/TraceDTO.java | 68 +++++++++++++++++++
2 files changed, 76 insertions(+), 1 deletion(-)
create mode 100644 src/main/java/pintudos/game/model/TraceDTO.java
diff --git a/src/main/java/pintudos/game/controller/TraceController.java b/src/main/java/pintudos/game/controller/TraceController.java
index d547b3a..f0555cc 100644
--- a/src/main/java/pintudos/game/controller/TraceController.java
+++ b/src/main/java/pintudos/game/controller/TraceController.java
@@ -4,6 +4,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import pintudos.game.model.Trace;
+import pintudos.game.model.TraceDTO;
import pintudos.game.service.TraceService;
@RestController
@@ -15,7 +16,13 @@ public class TraceController {
// Guardar un trazo
@PostMapping
- public Trace saveTrace(@RequestBody Trace trace) {
+ public Trace saveTrace(@RequestBody TraceDTO tracedDto) {
+ Trace trace = new Trace(
+ tracedDto.getRoomId(),
+ tracedDto.getPoints(),
+ tracedDto.getColor(),
+ tracedDto.getWidth()
+ );
return traceService.saveTrace(trace); // Guardamos el trazo
}
diff --git a/src/main/java/pintudos/game/model/TraceDTO.java b/src/main/java/pintudos/game/model/TraceDTO.java
new file mode 100644
index 0000000..8e2530f
--- /dev/null
+++ b/src/main/java/pintudos/game/model/TraceDTO.java
@@ -0,0 +1,68 @@
+package pintudos.game.model;
+
+import java.util.List;
+import org.springframework.data.annotation.Id;
+
+public class TraceDTO {
+
+ @Id
+ private String id;
+
+ private String roomId;
+ private List points; // Usar la clase personalizada
+ private String color;
+ private int width;
+
+ public TraceDTO(
+ String roomId,
+ List points,
+ String color,
+ int width
+ ) {
+ this.roomId = roomId;
+ this.points = points;
+ this.color = color;
+ this.width = width;
+ }
+
+ // Getters y Setters
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(String roomId) {
+ this.roomId = roomId;
+ }
+
+ public List getPoints() {
+ return points;
+ }
+
+ public void setPoints(List points) {
+ this.points = points;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public void setWidth(int width) {
+ this.width = width;
+ }
+}
From ea8d2dd755fc473f7a557ca838ee032c3548149c Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Wed, 21 May 2025 11:53:06 -0500
Subject: [PATCH 23/25] fix
---
.../pintudos/game/controller/TraceController.java | 1 -
.../game/{model => controller}/TraceDTO.java | 13 ++-----------
2 files changed, 2 insertions(+), 12 deletions(-)
rename src/main/java/pintudos/game/{model => controller}/TraceDTO.java (86%)
diff --git a/src/main/java/pintudos/game/controller/TraceController.java b/src/main/java/pintudos/game/controller/TraceController.java
index f0555cc..df7ac83 100644
--- a/src/main/java/pintudos/game/controller/TraceController.java
+++ b/src/main/java/pintudos/game/controller/TraceController.java
@@ -4,7 +4,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import pintudos.game.model.Trace;
-import pintudos.game.model.TraceDTO;
import pintudos.game.service.TraceService;
@RestController
diff --git a/src/main/java/pintudos/game/model/TraceDTO.java b/src/main/java/pintudos/game/controller/TraceDTO.java
similarity index 86%
rename from src/main/java/pintudos/game/model/TraceDTO.java
rename to src/main/java/pintudos/game/controller/TraceDTO.java
index 8e2530f..94a8526 100644
--- a/src/main/java/pintudos/game/model/TraceDTO.java
+++ b/src/main/java/pintudos/game/controller/TraceDTO.java
@@ -1,13 +1,11 @@
-package pintudos.game.model;
+package pintudos.game.controller;
import java.util.List;
import org.springframework.data.annotation.Id;
+import pintudos.game.model.CustomPoint;
public class TraceDTO {
- @Id
- private String id;
-
private String roomId;
private List points; // Usar la clase personalizada
private String color;
@@ -26,13 +24,6 @@ public TraceDTO(
}
// Getters y Setters
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
public String getRoomId() {
return roomId;
From 892bdfb5a63bb6a07144ae7c743df3cab6334c56 Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Wed, 21 May 2025 12:05:23 -0500
Subject: [PATCH 24/25] fix dublicate lines
---
.../pintudos/game/controller/TraceDTO.java | 49 +------------------
1 file changed, 2 insertions(+), 47 deletions(-)
diff --git a/src/main/java/pintudos/game/controller/TraceDTO.java b/src/main/java/pintudos/game/controller/TraceDTO.java
index 94a8526..870fb95 100644
--- a/src/main/java/pintudos/game/controller/TraceDTO.java
+++ b/src/main/java/pintudos/game/controller/TraceDTO.java
@@ -1,59 +1,14 @@
package pintudos.game.controller;
import java.util.List;
-import org.springframework.data.annotation.Id;
+import lombok.Data;
import pintudos.game.model.CustomPoint;
+@Data
public class TraceDTO {
private String roomId;
private List points; // Usar la clase personalizada
private String color;
private int width;
-
- public TraceDTO(
- String roomId,
- List points,
- String color,
- int width
- ) {
- this.roomId = roomId;
- this.points = points;
- this.color = color;
- this.width = width;
- }
-
- // Getters y Setters
-
- public String getRoomId() {
- return roomId;
- }
-
- public void setRoomId(String roomId) {
- this.roomId = roomId;
- }
-
- public List getPoints() {
- return points;
- }
-
- public void setPoints(List points) {
- this.points = points;
- }
-
- public String getColor() {
- return color;
- }
-
- public void setColor(String color) {
- this.color = color;
- }
-
- public int getWidth() {
- return width;
- }
-
- public void setWidth(int width) {
- this.width = width;
- }
}
From db476378d70fca1972ddc83fe44b730dba4ff3c7 Mon Sep 17 00:00:00 2001
From: Diego <58009401+marzo245@users.noreply.github.com>
Date: Wed, 21 May 2025 12:15:03 -0500
Subject: [PATCH 25/25] fix bugs
---
pom.xml | 156 +++++++++---------
.../pintudos/game/controller/TraceDTO.java | 4 +
2 files changed, 83 insertions(+), 77 deletions(-)
diff --git a/pom.xml b/pom.xml
index 738e9d5..c28b894 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,83 +1,85 @@
-
- 4.0.0
-
- org.springframework.boot
- spring-boot-starter-parent
- 3.4.3
-
-
- pintudos
- game
- 0.0.1-SNAPSHOT
- game
- This is a game similar to pictionari, which this project is the back of the game
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 17
-
-
-
- org.springframework.boot
- spring-boot-starter-data-mongodb
-
-
- org.springframework.boot
- spring-boot-starter-oauth2-client
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-starter-websocket
-
+
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
- org.springframework.security
- spring-security-test
- test
-
-
- org.projectlombok
- lombok
- 1.18.24
- provided
-
+ 4.0.0
-
- org.springframework.data
- spring-data-mongodb
-
-
-
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.4.3
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
+ pintudos
+ game
+ 0.0.1-SNAPSHOT
+ game
+ This is a game similar to pictionari, which this project is the back of the game
+
+
+ 17
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-mongodb
+
+
+ org.springframework.boot
+ spring-boot-starter-oauth2-client
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.security
+ spring-security-test
+ test
+
+
+ org.projectlombok
+ lombok
+ 1.18.24
+ provided
+
+
+ org.springframework.data
+ spring-data-mongodb
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.11.0
+
+ 17
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
diff --git a/src/main/java/pintudos/game/controller/TraceDTO.java b/src/main/java/pintudos/game/controller/TraceDTO.java
index 870fb95..2b342ea 100644
--- a/src/main/java/pintudos/game/controller/TraceDTO.java
+++ b/src/main/java/pintudos/game/controller/TraceDTO.java
@@ -2,9 +2,13 @@
import java.util.List;
import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
import pintudos.game.model.CustomPoint;
@Data
+@Getter
+@Setter
public class TraceDTO {
private String roomId;