1919import socket_server .domain .room .repository .RoomRepository ;
2020import socket_server .domain .room .repository .RoomUserRepository ;
2121
22+ import java .util .ArrayList ;
2223import java .util .List ;
2324import java .util .Map ;
2425
@@ -104,6 +105,10 @@ public void passRoomOwner(String roomId, String oldOwnerId, String newOwnerId) {
104105 throw new SocketCustomException (ROOM_ERROR , RoomExceptionCode .NOT_ROOM_OWNER );
105106 }
106107
108+ RoomUserInfo oldOwner = roomUserRepository .findUserInfoInRoom (roomId , oldOwnerId , ROOM_ERROR );
109+ oldOwner .setReady (false );
110+ roomUserRepository .saveUserToRoom (oldOwner , roomId , ROOM_ERROR );
111+
107112 RoomUserInfo newOwner = roomUserRepository .findUserInfoInRoom (roomId , newOwnerId , ROOM_ERROR );
108113
109114 changeRoomOwner (roomId , newOwner );
@@ -147,14 +152,18 @@ private void processUserExit(String roomId, String userUuid, boolean isKicked) {
147152 }
148153
149154 public void changeRoomOwner (String roomId , RoomUserInfo newOwner ) {
155+ newOwner .setReady (true );
156+ roomUserRepository .saveUserToRoom (newOwner , roomId , ROOM_ERROR );
157+
150158 roomRepository .updateAllFields (roomId , Map .of (
151159 RoomField .OWNER_UUID .getRedisField (), newOwner .getUserUuid (),
152160 RoomField .OWNER .getRedisField (), newOwner .getNickname ()
153161 ));
154162
155163 RoomMetadata updatedMetadata = RoomMetadata .fromRedisMap (roomId , roomRepository .getRoomData (roomId ));
156164 RoomInfoRes roomInfoRes = RoomInfoRes .from (updatedMetadata );
157- List <RoomUserInfo > userList = roomUserRepository .findUsersByRoomId (roomId , ROOM_ERROR );
165+ List <RoomUserInfo > userList = new ArrayList <>(roomUserRepository .findUsersByRoomId (roomId , ROOM_ERROR ));
166+ sortUserListWithOwnerFirst (userList , updatedMetadata .getOwnerUuid ());
158167 RoomDetailRes detailRes = new RoomDetailRes (roomInfoRes , userList );
159168 roomBroadcaster .broadcastToRoom (roomId , newOwner .getUserUuid (), RoomEventType .UPDATE , detailRes );
160169
@@ -164,6 +173,18 @@ public void changeRoomOwner(String roomId, RoomUserInfo newOwner) {
164173 log .info ("방장 권한이 {}에게 위임되었습니다. (roomId: {})" , newOwner .getUserUuid (), roomId );
165174 }
166175
176+ private void sortUserListWithOwnerFirst (List <RoomUserInfo > userList , String ownerUuid ) {
177+ userList .sort ((u1 , u2 ) -> {
178+ if (u1 .getUserUuid ().equals (ownerUuid )) {
179+ return -1 ;
180+ }
181+ if (u2 .getUserUuid ().equals (ownerUuid )) {
182+ return 1 ;
183+ }
184+ return 0 ;
185+ });
186+ }
187+
167188 public RoomMetadata validateRoomOwnerAndGetRoomMetadata (String roomId , String userUuid ) {
168189 if (!validateRoomOwner (roomId , userUuid )){
169190 throw new SocketCustomException (ROOM_ERROR , RoomExceptionCode .NOT_ROOM_OWNER );
0 commit comments