Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,30 @@ public GlobalResponse<Object> getMyHeartRoomList(
return GlobalResponse.success("좋아요 누른 채팅방 리스트 조회 완료", list);
}

// 채팅방 제목 검색 조회
@GetMapping("/room/search")
@LoginCheck
public GlobalResponse<Object> searchRoomName(
@RequestParam(name = "roomName") String roomName,
Pageable pageable) {

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

if (authentication instanceof OAuth2AuthenticationToken) {
CustomOAuth2User principal = (CustomOAuth2User) authentication.getPrincipal();
Long userId = principal.getId(); // Extract userId from the principal

if (roomName.isEmpty()) {
throw new IllegalArgumentException("원하는 채팅방의 제목을 입력하세요.");
}

List<ChatRoomDto> list = chatRoomService.searchRoomByTitle(roomName, userId, pageable);
return GlobalResponse.success(list);
} else {
throw new IllegalArgumentException("로그인 후에 이용해 주세요.");
}
}




Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,7 @@ public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long> {
@Query("SELECT c FROM ChatRoom c WHERE c.id IN :ids ORDER BY c.createdAt DESC")
Page<ChatRoom> findChatRoomByInId(@Param("ids") List<Long> ids, Pageable pageable);

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

}
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,6 @@ public interface ChatRoomService {
List<ChatRoomDto> myHeartRoomList(Long userId, Pageable pageable);

void joinRoom(Long roomId, Long userId, ChatRoomRequest chatRoomRequest);

List<ChatRoomDto> searchRoomByTitle(String roomName, Long userId, Pageable pageable);
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

import static cmf.commitField.global.error.ErrorCode.NOT_FOUND_ROOM;
import static java.time.LocalDateTime.now;

@Service
Expand Down Expand Up @@ -138,7 +139,7 @@ public void joinRoom(Long roomId, Long userId, ChatRoomRequest chatRoomRequest)

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

// user_chatroom 현재 인원 카운트 (비즈니스 로직)
Long currentUserCount = userChatRoomRepository.countNonLockByChatRoomId(roomId); // lock (기존)
Expand Down Expand Up @@ -205,16 +206,14 @@ public void outRoom(Long userId, Long roomId) {
return;
}
// 방장이라면 방 삭제
chatMessageRepository.deleteChatMsgByChatRoom_Id(roomId); //방 삭제 시 채팅도 다 삭제(필요 시)
chatMessageRepository.deleteChatMsgByChatRoom_Id(roomId); //방 삭제 시 채팅도 다 삭제
// 방 삭제시 채탱 메세지 전체 삭제(포함)
userChatRoomRepository.deleteUserChatRoomByChatRoom_Id(roomId);

//채팅방 삭제
chatRoomRepository.deleteById(roomId);

// 방의 생성자와 현재 사용자가 같은지 확인
boolean isCreator = Objects.equals(room.getRoomCreator(), userId);

// 방장 여부와 상관없이 항상 사용자-채팅방 연결만 제거
// 방이 삭제되지 않고 목록에 계속 표시됨
userChatRoomRepository.deleteUserChatRoomByChatRoom_IdAndUserId(roomId, userId);
}

// 방 삭제는 별도의 메소드로 분리
Expand Down Expand Up @@ -250,6 +249,31 @@ public void updateRoom(Long roomId, ChatRoomUpdateRequest chatRoomUpdateRequest,
chatRoomRepository.save(room);
}

@Override
@Transactional(readOnly = true)
public List<ChatRoomDto> searchRoomByTitle(String roomName, Long userId, Pageable pageable) {
getUser(userId);
Page<ChatRoom> search = chatRoomRepository.findChatRoomWithPartOfTitle(roomName, pageable);

List<ChatRoom> searchRoomList = search.toList();
List<ChatRoomDto> chatRoomDtos = new ArrayList<>();
if (searchRoomList.isEmpty()) {
throw new CustomException(NOT_FOUND_ROOM);
}

for (ChatRoom chatRoom : searchRoomList) {
ChatRoomDto build = ChatRoomDto.builder()
.id(chatRoom.getId())
.title(chatRoom.getTitle())
.heartCount(chatRoom.getHearts().size())
.currentUserCount((long) chatRoom.getUserChatRooms().size())
.userCountMax(chatRoom.getUserCountMax())
.build();
chatRoomDtos.add(build);
}
return chatRoomDtos;
}

private User getUser(Long userId) {
return userRepository.findById(userId)
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_USER));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
//import cmf.commitField.domain.chat.chatRoom.entity.ChatRoom;
//import cmf.commitField.domain.chat.chatRoom.repository.ChatRoomRepository;
//import cmf.commitField.domain.chat.userChatRoom.repository.UserChatRoomRepository;
//import cmf.commitField.domain.user.service.UserService;
//import org.springframework.beans.factory.annotation.Autowired;
//
//import java.util.ArrayList;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,7 @@ public interface UserChatRoomRepository extends JpaRepository<UserChatRoom, Long
void deleteUserChatRoomByChatRoom_Id(Long chatRoomId);
// 특정 방에서 특정 사용자만 삭제
void deleteUserChatRoomByChatRoom_IdAndUserId(Long chatRoomId, Long userId);
// 특정 방과 사용자 관계 삭제
void deleteUserChatRoomByUserId(Long userId);
// 사용자가 해당 방에 참여한 여부 확인
boolean existsByChatRoomIdAndUserId(Long roomId, Long userId);

// 특정 방에 참여한 모든 UserChatRoom 관계 조회
List<UserChatRoom> findByChatRoom_Id(Long chatRoomId);
@Query("select u.user.id from UserChatRoom u where u.chatRoom.id = ?1")
Expand All @@ -36,7 +33,6 @@ public interface UserChatRoomRepository extends JpaRepository<UserChatRoom, Long
//out room 조회
List<UserChatRoom> findUserByChatRoomId(Long roomId);

Optional<UserChatRoom> findByUserId(Long userId);
//채팅방 join한 user
Optional<UserChatRoom> findByUserIdAndChatRoomId(Long userId, Long chatRoomId);

Expand Down