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;