Skip to content

Commit 8d4b576

Browse files
committed
Feat: 채팅방 유저 조회
1 parent a136643 commit 8d4b576

File tree

10 files changed

+74
-14
lines changed

10 files changed

+74
-14
lines changed

src/main/java/cmf/commitField/domain/chat/chatRoom/controller/ChatRoomController.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import cmf.commitField.domain.chat.chatRoom.controller.request.ChatRoomRequest;
44
import cmf.commitField.domain.chat.chatRoom.controller.request.ChatRoomUpdateRequest;
55
import cmf.commitField.domain.chat.chatRoom.dto.ChatRoomDto;
6+
import cmf.commitField.domain.chat.chatRoom.dto.ChatRoomUserDto;
67
import cmf.commitField.domain.chat.chatRoom.service.ChatRoomService;
78
import cmf.commitField.domain.user.entity.CustomOAuth2User;
89
import cmf.commitField.global.error.ErrorCode;
@@ -165,4 +166,23 @@ public GlobalResponse<Object> deleteRoom(
165166
}
166167
}
167168

169+
//채팅방 유저 목록 조회
170+
@GetMapping("/room/users/{roomId}")
171+
@LoginCheck
172+
public GlobalResponse<Object> getRoomUsers(
173+
@PathVariable Long roomId) {
174+
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
175+
176+
if (authentication instanceof OAuth2AuthenticationToken) {
177+
CustomOAuth2User principal = (CustomOAuth2User) authentication.getPrincipal();
178+
Long userId = principal.getId(); // Extract userId from the principal
179+
List<ChatRoomUserDto> roomUsers = chatRoomService.getRoomUsers(roomId, userId);
180+
return GlobalResponse.success(roomUsers);
181+
} else {
182+
throw new IllegalArgumentException("로그인 후에 이용해 주세요.");
183+
}
184+
}
185+
186+
187+
168188
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package cmf.commitField.domain.chat.chatRoom.dto;
2+
3+
import lombok.*;
4+
5+
@Getter
6+
@Setter
7+
@NoArgsConstructor
8+
@AllArgsConstructor
9+
@Builder
10+
public class ChatRoomUserDto {
11+
private String nickname;
12+
private Boolean status;
13+
}

src/main/java/cmf/commitField/domain/chat/chatRoom/repository/ChatRoomRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long> {
2424

2525
Page<ChatRoom> findAllByUserChatRoomsUserId(Long userId,Pageable pageable);
2626

27-
@Query(value = "SELECT ROOM_CREATOR FROM chat_room WHERE CHAT_ROOM_ID = ?", nativeQuery = true)
27+
@Query(value = "SELECT ROOM_CREATOR FROM chat_room WHERE ID = ?", nativeQuery = true)
2828
Optional<Long> findChatRoomIdByRoomId(@Param("roomId") Long roomId);
2929

3030
}

src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import cmf.commitField.domain.chat.chatRoom.controller.request.ChatRoomRequest;
44
import cmf.commitField.domain.chat.chatRoom.controller.request.ChatRoomUpdateRequest;
55
import cmf.commitField.domain.chat.chatRoom.dto.ChatRoomDto;
6+
import cmf.commitField.domain.chat.chatRoom.dto.ChatRoomUserDto;
67
import org.springframework.data.domain.Pageable;
78

89
import java.util.List;
@@ -26,4 +27,6 @@ public interface ChatRoomService {
2627
void deleteRoom(Long userId, Long roomId);
2728
//채팅방 제목 수정
2829
void updateRoom(Long roomId, ChatRoomUpdateRequest chatRoomUpdateRequest, Long userId);
30+
31+
List<ChatRoomUserDto> getRoomUsers(Long roomId, Long userId);
2932
}

src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomServiceImpl.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import cmf.commitField.domain.chat.chatRoom.controller.request.ChatRoomRequest;
55
import cmf.commitField.domain.chat.chatRoom.controller.request.ChatRoomUpdateRequest;
66
import cmf.commitField.domain.chat.chatRoom.dto.ChatRoomDto;
7+
import cmf.commitField.domain.chat.chatRoom.dto.ChatRoomUserDto;
78
import cmf.commitField.domain.chat.chatRoom.entity.ChatRoom;
89
import cmf.commitField.domain.chat.chatRoom.repository.ChatRoomRepository;
910
import cmf.commitField.domain.chat.userChatRoom.entity.UserChatRoom;
@@ -218,4 +219,35 @@ private ChatRoom getChatRoom(Long roomId) {
218219

219220
}
220221

222+
@Override
223+
@Transactional(readOnly = true)
224+
public List<ChatRoomUserDto> getRoomUsers(Long roomId, Long userId) {
225+
// 방 정보
226+
getChatRoom(roomId);
227+
// 로그인 유저 정보
228+
getUser(userId);
229+
// 방에 있는 유저 정보
230+
List<UserChatRoom> userIds = userChatRoomRepository
231+
.findUserChatRoomByChatRoomId(roomId);
232+
// 방에 있지 않은 유저는 볼 수 없음
233+
List<Long> userIdList = new ArrayList<>();
234+
for (UserChatRoom chatRoom : userIds) {
235+
Long id = chatRoom.getUser().getId();
236+
userIdList.add(id);
237+
}
238+
if (!userIdList.contains(userId)) {
239+
throw new CustomException(ErrorCode.NOT_ROOM_MEMBER);
240+
}
241+
// DTO 담기
242+
List<ChatRoomUserDto> chatRoomUserDtos = new ArrayList<>();
243+
for (UserChatRoom userChatRoom : userIds) {
244+
ChatRoomUserDto build = ChatRoomUserDto.builder()
245+
.nickname(userChatRoom.getUser().getNickname())
246+
.status(userChatRoom.getUser().getStatus())
247+
.build();
248+
chatRoomUserDtos.add(build);
249+
}
250+
return chatRoomUserDtos;
251+
}
252+
221253
}

src/main/java/cmf/commitField/domain/chat/userChatRoom/dto/UserChatRoomDto.java

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/main/java/cmf/commitField/domain/chat/userChatRoom/repository/UserChatRoomRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,7 @@ public interface UserChatRoomRepository extends JpaRepository<UserChatRoom, Long
3131
@Query("select u.user.id from UserChatRoom u where u.chatRoom.id = ?1")
3232
List<Long> findUserChatRoomByChatRoom_Id(Long chatRoomId);
3333

34+
List<UserChatRoom> findUserChatRoomByChatRoomId(Long roomId);
35+
3436

3537
}

src/main/java/cmf/commitField/domain/user/entity/User.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public class User extends BaseEntity {
2525
private String email; // 이메일
2626
private String nickname; // 닉네임
2727
private String avatarUrl; //아바타
28+
private Boolean status; //로그인 true, 로그아웃 false
2829

2930
@Enumerated(EnumType.STRING) // DB에 저장될 때 String 형태로 저장됨
3031
private Role role;

src/main/java/cmf/commitField/domain/user/service/CustomOAuth2UserService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) {
4949
} else {
5050
//유저 정보가 db에 존재하지 않을 경우 회원가입 시킨다.
5151
//유저 생성 및 펫 생성
52-
user = new User(username, email, name, avatarUrl, User.Role.USER, new ArrayList<>(), new ArrayList<>(), new ArrayList<>());
52+
user = new User(username, email, name, avatarUrl,true, User.Role.USER, new ArrayList<>(), new ArrayList<>(), new ArrayList<>());
5353
userRepository.save(user);
5454

5555
Random random = new Random(); //펫 랜덤 생성

src/main/java/cmf/commitField/global/error/ErrorCode.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ public enum ErrorCode {
5555
USER_CREATED_ROOM_NOT_FOUND(HttpStatus.NOT_FOUND, "사용자가 생성한 방이 없습니다."),
5656
ALREADY_JOIN_ROOM(HttpStatus.BAD_REQUEST, "사용자는 이미 해당 방에 참여하고 있습니다."),
5757
NOT_EXIST_CLIENT(HttpStatus.NOT_FOUND, "채팅방에 사용자가 존재하지 않습니다."),
58+
NOT_ROOM_MEMBER(HttpStatus.FORBIDDEN, "채팅방에 속한 유저가 아닙니다."),
5859

5960
//chatMessage
6061
EMPTY_MESSAGE(HttpStatus.BAD_REQUEST, "채팅 메시지는 공백으로 보낼 수 없습니다."),

0 commit comments

Comments
 (0)