From 829131db7ad9d8857e8af628310b0d0c0c9d020d Mon Sep 17 00:00:00 2001 From: LeeSeunghyeon <50231309+Uralauah@users.noreply.github.com> Date: Tue, 18 Nov 2025 13:23:02 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=EB=B0=A9=EC=9E=A5=20=EA=B6=8C?= =?UTF-8?q?=ED=95=9C=20=EC=9C=84=EC=9E=84=20=EC=8B=9C=20=EC=A4=80=EB=B9=84?= =?UTF-8?q?=20=EC=83=81=ED=83=9C=20=EB=B3=80=EA=B2=BD=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../socket_server/domain/room/service/RoomUserService.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gotcha-socket/src/main/java/socket_server/domain/room/service/RoomUserService.java b/gotcha-socket/src/main/java/socket_server/domain/room/service/RoomUserService.java index d9661182..ea860469 100644 --- a/gotcha-socket/src/main/java/socket_server/domain/room/service/RoomUserService.java +++ b/gotcha-socket/src/main/java/socket_server/domain/room/service/RoomUserService.java @@ -104,6 +104,10 @@ public void passRoomOwner(String roomId, String oldOwnerId, String newOwnerId) { throw new SocketCustomException(ROOM_ERROR, RoomExceptionCode.NOT_ROOM_OWNER); } + RoomUserInfo oldOwner = roomUserRepository.findUserInfoInRoom(roomId, oldOwnerId, ROOM_ERROR); + oldOwner.setReady(false); + roomUserRepository.saveUserToRoom(oldOwner, roomId, ROOM_ERROR); + RoomUserInfo newOwner = roomUserRepository.findUserInfoInRoom(roomId, newOwnerId, ROOM_ERROR); changeRoomOwner(roomId, newOwner); @@ -147,6 +151,9 @@ private void processUserExit(String roomId, String userUuid, boolean isKicked) { } public void changeRoomOwner(String roomId, RoomUserInfo newOwner) { + newOwner.setReady(true); + roomUserRepository.saveUserToRoom(newOwner, roomId, ROOM_ERROR); + roomRepository.updateAllFields(roomId, Map.of( RoomField.OWNER_UUID.getRedisField(), newOwner.getUserUuid(), RoomField.OWNER.getRedisField(), newOwner.getNickname() From da10f4202ccd8e4a9ae242e613746ab8e2306857 Mon Sep 17 00:00:00 2001 From: LeeSeunghyeon <50231309+Uralauah@users.noreply.github.com> Date: Tue, 18 Nov 2025 13:32:01 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20userList=20=EB=B0=A9=EC=9E=A5?= =?UTF-8?q?=EC=9D=B4=20=EC=A0=9C=EC=9D=BC=20=EC=95=9E=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=98=A4=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/room/service/RoomService.java | 18 ++++++++++++++++-- .../domain/room/service/RoomUserService.java | 16 +++++++++++++++- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/gotcha-socket/src/main/java/socket_server/domain/room/service/RoomService.java b/gotcha-socket/src/main/java/socket_server/domain/room/service/RoomService.java index 8755ce6a..417a64ea 100644 --- a/gotcha-socket/src/main/java/socket_server/domain/room/service/RoomService.java +++ b/gotcha-socket/src/main/java/socket_server/domain/room/service/RoomService.java @@ -171,7 +171,8 @@ private void broadcastUpdatedRoomInfoToListAndRoom(String roomId, RoomMetadata m RoomSummaryRes summary = RoomSummaryRes.of(metadata, currentUser); lobbyBroadCaster.broadcastToRoomList("SYSTEM", RoomEventType.UPDATE, summary); - List userList = roomUserRepository.findUsersByRoomId(roomId, ROOM_ERROR); + List userList = new ArrayList<>(roomUserRepository.findUsersByRoomId(roomId, ROOM_ERROR)); + sortUserListWithOwnerFirst(userList, metadata.getOwnerUuid()); RoomDetailRes roomDetailRes = new RoomDetailRes(RoomInfoRes.from(metadata), userList); roomBroadcaster.broadcastToRoom(roomId, "SYSTEM", RoomEventType.UPDATE, roomDetailRes); @@ -224,8 +225,21 @@ public RoomDetailRes getRoomDetails(String roomId, String userUuid) { } RoomMetadata metadata = RoomMetadata.fromRedisMap(roomId, roomData); - List userList = roomUserRepository.findUsersByRoomId(roomId, ROOM_ERROR); + List userList = new ArrayList<>(roomUserRepository.findUsersByRoomId(roomId, ROOM_ERROR)); + sortUserListWithOwnerFirst(userList, metadata.getOwnerUuid()); return new RoomDetailRes(RoomInfoRes.from(metadata), userList); } + + private void sortUserListWithOwnerFirst(List userList, String ownerUuid) { + userList.sort((u1, u2) -> { + if (u1.getUserUuid().equals(ownerUuid)) { + return -1; + } + if (u2.getUserUuid().equals(ownerUuid)) { + return 1; + } + return 0; + }); + } } diff --git a/gotcha-socket/src/main/java/socket_server/domain/room/service/RoomUserService.java b/gotcha-socket/src/main/java/socket_server/domain/room/service/RoomUserService.java index ea860469..32c8c57c 100644 --- a/gotcha-socket/src/main/java/socket_server/domain/room/service/RoomUserService.java +++ b/gotcha-socket/src/main/java/socket_server/domain/room/service/RoomUserService.java @@ -19,6 +19,7 @@ import socket_server.domain.room.repository.RoomRepository; import socket_server.domain.room.repository.RoomUserRepository; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -161,7 +162,8 @@ public void changeRoomOwner(String roomId, RoomUserInfo newOwner) { RoomMetadata updatedMetadata = RoomMetadata.fromRedisMap(roomId, roomRepository.getRoomData(roomId)); RoomInfoRes roomInfoRes = RoomInfoRes.from(updatedMetadata); - List userList = roomUserRepository.findUsersByRoomId(roomId, ROOM_ERROR); + List userList = new ArrayList<>(roomUserRepository.findUsersByRoomId(roomId, ROOM_ERROR)); + sortUserListWithOwnerFirst(userList, updatedMetadata.getOwnerUuid()); RoomDetailRes detailRes = new RoomDetailRes(roomInfoRes, userList); roomBroadcaster.broadcastToRoom(roomId, newOwner.getUserUuid(), RoomEventType.UPDATE, detailRes); @@ -171,6 +173,18 @@ public void changeRoomOwner(String roomId, RoomUserInfo newOwner) { log.info("방장 권한이 {}에게 위임되었습니다. (roomId: {})", newOwner.getUserUuid(), roomId); } + private void sortUserListWithOwnerFirst(List userList, String ownerUuid) { + userList.sort((u1, u2) -> { + if (u1.getUserUuid().equals(ownerUuid)) { + return -1; + } + if (u2.getUserUuid().equals(ownerUuid)) { + return 1; + } + return 0; + }); + } + public RoomMetadata validateRoomOwnerAndGetRoomMetadata(String roomId, String userUuid) { if(!validateRoomOwner(roomId, userUuid)){ throw new SocketCustomException(ROOM_ERROR, RoomExceptionCode.NOT_ROOM_OWNER); From 995624a8ba1843738fd51a29ad71ef0786b4dce2 Mon Sep 17 00:00:00 2001 From: LeeSeunghyeon <50231309+Uralauah@users.noreply.github.com> Date: Tue, 18 Nov 2025 13:47:50 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=EA=B2=8C=EC=9E=84=20=EC=A2=85?= =?UTF-8?q?=EB=A3=8C=20=ED=9B=84=20=EC=A4=80=EB=B9=84=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=20=ED=95=B4=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/game/service/GameStartService.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/gotcha-socket/src/main/java/socket_server/domain/game/service/GameStartService.java b/gotcha-socket/src/main/java/socket_server/domain/game/service/GameStartService.java index cc0f0183..99bd48cf 100644 --- a/gotcha-socket/src/main/java/socket_server/domain/game/service/GameStartService.java +++ b/gotcha-socket/src/main/java/socket_server/domain/game/service/GameStartService.java @@ -2,6 +2,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.scheduling.TaskScheduler; import org.springframework.stereotype.Service; import socket_server.common.exception.ErrorType; @@ -34,7 +35,7 @@ @Service @RequiredArgsConstructor public class GameStartService { - + @Qualifier("taskScheduler") private final TaskScheduler taskScheduler; private final RoomUserService roomUserService; private final GamePlayerRepository gamePlayerRepository; @@ -91,6 +92,16 @@ public void startGame(String roomId, String userUuid, ErrorType errorType) { // 8. 5초 후 게임 시작(EntryPoint) taskScheduler.schedule(() -> roundStartService.startNextRound(roomId), Instant.now().plusSeconds(5)); + + List users = new ArrayList<>(roomUserRepository.findUsersByRoomId(roomId, errorType)); + String ownerUuid = roomMetadata.getOwnerUuid(); + + for (RoomUserInfo user : users) { + if (!user.getUserUuid().equals(ownerUuid)) { + user.setReady(false); + roomUserRepository.saveUserToRoom(user, roomId, errorType); + } + } } private void saveGame(Game game) {