Skip to content

Commit efceb07

Browse files
committed
Feat:채팅방 검색
1 parent cddfb81 commit efceb07

File tree

5 files changed

+57
-1
lines changed

5 files changed

+57
-1
lines changed

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,30 @@ public GlobalResponse<Object> getMyHeartRoomList(
213213
return GlobalResponse.success("좋아요 누른 채팅방 리스트 조회 완료", list);
214214
}
215215

216+
// 채팅방 제목 검색 조회
217+
@GetMapping("/room/search")
218+
@LoginCheck
219+
public GlobalResponse<Object> searchRoomName(
220+
@RequestParam(name = "roomName") String roomName,
221+
Pageable pageable) {
222+
223+
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
224+
225+
if (authentication instanceof OAuth2AuthenticationToken) {
226+
CustomOAuth2User principal = (CustomOAuth2User) authentication.getPrincipal();
227+
Long userId = principal.getId(); // Extract userId from the principal
228+
229+
if (roomName.isEmpty()) {
230+
throw new IllegalArgumentException("원하는 채팅방의 제목을 입력하세요.");
231+
}
232+
233+
List<ChatRoomDto> list = chatRoomService.searchRoomByTitle(roomName, userId, pageable);
234+
return GlobalResponse.success(list);
235+
} else {
236+
throw new IllegalArgumentException("로그인 후에 이용해 주세요.");
237+
}
238+
}
239+
216240

217241

218242

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,7 @@ public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long> {
3636
@Query("SELECT c FROM ChatRoom c WHERE c.id IN :ids ORDER BY c.createdAt DESC")
3737
Page<ChatRoom> findChatRoomByInId(@Param("ids") List<Long> ids, Pageable pageable);
3838

39+
@Query("SELECT c FROM ChatRoom c WHERE c.title LIKE CONCAT('%', :title, '%')")
40+
Page<ChatRoom> findChatRoomWithPartOfTitle(@Param("title") String title, Pageable pageable);
41+
3942
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,6 @@ public interface ChatRoomService {
3535
List<ChatRoomDto> myHeartRoomList(Long userId, Pageable pageable);
3636

3737
void joinRoom(Long roomId, Long userId, ChatRoomRequest chatRoomRequest);
38+
39+
List<ChatRoomDto> searchRoomByTitle(String roomName, Long userId, Pageable pageable);
3840
}

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

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.concurrent.TimeUnit;
3030
import java.util.stream.Collectors;
3131

32+
import static cmf.commitField.global.error.ErrorCode.NOT_FOUND_ROOM;
3233
import static java.time.LocalDateTime.now;
3334

3435
@Service
@@ -138,7 +139,7 @@ public void joinRoom(Long roomId, Long userId, ChatRoomRequest chatRoomRequest)
138139

139140
// room 조회
140141
ChatRoom chatRoom = chatRoomRepository.findById(roomId) // lock (기존)
141-
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_ROOM));
142+
.orElseThrow(() -> new CustomException(NOT_FOUND_ROOM));
142143

143144
// user_chatroom 현재 인원 카운트 (비즈니스 로직)
144145
Long currentUserCount = userChatRoomRepository.countNonLockByChatRoomId(roomId); // lock (기존)
@@ -236,6 +237,31 @@ public void updateRoom(Long roomId, ChatRoomUpdateRequest chatRoomUpdateRequest,
236237
chatRoomRepository.save(room);
237238
}
238239

240+
@Override
241+
@Transactional(readOnly = true)
242+
public List<ChatRoomDto> searchRoomByTitle(String roomName, Long userId, Pageable pageable) {
243+
getUser(userId);
244+
Page<ChatRoom> search = chatRoomRepository.findChatRoomWithPartOfTitle(roomName, pageable);
245+
246+
List<ChatRoom> searchRoomList = search.toList();
247+
List<ChatRoomDto> chatRoomDtos = new ArrayList<>();
248+
if (searchRoomList.isEmpty()) {
249+
throw new CustomException(NOT_FOUND_ROOM);
250+
}
251+
252+
for (ChatRoom chatRoom : searchRoomList) {
253+
ChatRoomDto build = ChatRoomDto.builder()
254+
.id(chatRoom.getId())
255+
.title(chatRoom.getTitle())
256+
.heartCount(chatRoom.getHearts().size())
257+
.currentUserCount((long) chatRoom.getUserChatRooms().size())
258+
.userCountMax(chatRoom.getUserCountMax())
259+
.build();
260+
chatRoomDtos.add(build);
261+
}
262+
return chatRoomDtos;
263+
}
264+
239265
private User getUser(Long userId) {
240266
return userRepository.findById(userId)
241267
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_USER));

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
//import cmf.commitField.domain.chat.chatRoom.entity.ChatRoom;
44
//import cmf.commitField.domain.chat.chatRoom.repository.ChatRoomRepository;
55
//import cmf.commitField.domain.chat.userChatRoom.repository.UserChatRoomRepository;
6+
//import cmf.commitField.domain.user.service.UserService;
67
//import org.springframework.beans.factory.annotation.Autowired;
78
//
89
//import java.util.ArrayList;

0 commit comments

Comments
 (0)