Skip to content

Commit fbdce6e

Browse files
committed
Feat: 좋아요 누른 방 리스트 조회 기능 추가
1 parent 55c7725 commit fbdce6e

File tree

6 files changed

+61
-3
lines changed

6 files changed

+61
-3
lines changed

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import lombok.RequiredArgsConstructor;
1414
import org.springframework.data.domain.Pageable;
1515
import org.springframework.security.core.Authentication;
16+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
1617
import org.springframework.security.core.context.SecurityContextHolder;
1718
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
1819
import org.springframework.web.bind.annotation.*;
@@ -189,13 +190,30 @@ public GlobalResponse<Object> getRoomUsers(
189190
@LoginCheck
190191
public GlobalResponse<Object> roomHeartSort(Pageable pageable) {
191192
List<ChatRoomDto> roomList = chatRoomService.getRoomHeartSortList(pageable);
192-
if (roomList.size() == 0) {
193+
if (roomList.isEmpty()) {
193194
return GlobalResponse.error(ErrorCode.NO_ROOM);
194195
} else {
195196
return GlobalResponse.success(roomList);
196197
}
197198
}
198199

200+
// 사용자(자신)가 좋아요 누른 방 리스트 조회
201+
@GetMapping("/room/myHeart/list")
202+
@LoginCheck
203+
public GlobalResponse<Object> getMyHeartRoomList(
204+
Pageable pageable,
205+
@AuthenticationPrincipal CustomOAuth2User principal) { // 인증된 사용자 정보 주입
206+
207+
Long userId = principal.getId(); // 현재 로그인된 사용자 ID 가져오기
208+
List<ChatRoomDto> list = chatRoomService.myHeartRoomList(userId, pageable);
209+
210+
if (list.isEmpty()) {
211+
return GlobalResponse.error(ErrorCode.NO_ROOM_FOUND);
212+
}
213+
return GlobalResponse.success("좋아요 누른 채팅방 리스트 조회 완료", list);
214+
}
215+
216+
199217

200218

201219

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.springframework.data.repository.query.Param;
99
import org.springframework.stereotype.Repository;
1010

11+
import java.util.List;
1112
import java.util.Optional;
1213

1314
@Repository
@@ -32,4 +33,7 @@ public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long> {
3233
"ORDER BY COUNT(h.user.id) DESC")
3334
Page<ChatRoom> findAllByOrderByHearts(Pageable pageable);
3435

36+
@Query("SELECT c FROM ChatRoom c WHERE c.id IN :ids ORDER BY c.createdAt DESC")
37+
Page<ChatRoom> findChatRoomByInId(@Param("ids") List<Long> ids, Pageable pageable);
38+
3539
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,6 @@ public interface ChatRoomService {
3232

3333
List<ChatRoomDto> getRoomHeartSortList(Pageable pageable);
3434

35+
List<ChatRoomDto> myHeartRoomList(Long userId, Pageable pageable);
3536

3637
}

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
@@ -9,6 +9,8 @@
99
import cmf.commitField.domain.chat.chatRoom.repository.ChatRoomRepository;
1010
import cmf.commitField.domain.chat.userChatRoom.entity.UserChatRoom;
1111
import cmf.commitField.domain.chat.userChatRoom.repository.UserChatRoomRepository;
12+
import cmf.commitField.domain.heart.entity.Heart;
13+
import cmf.commitField.domain.heart.repository.HeartRepository;
1214
import cmf.commitField.domain.user.entity.User;
1315
import cmf.commitField.domain.user.repository.UserRepository;
1416
import cmf.commitField.global.error.ErrorCode;
@@ -42,6 +44,8 @@ public class ChatRoomServiceImpl implements ChatRoomService {
4244

4345
private final RedissonClient redissonClient;
4446

47+
private final HeartRepository heartRepository;
48+
4549
@Override
4650
@Transactional
4751
public void createRoom(ChatRoomRequest chatRoomRequest, Long userId) {
@@ -261,4 +265,32 @@ public List<ChatRoomDto> getRoomHeartSortList(Pageable pageable) {
261265
return chatRoomDtos;
262266
}
263267

268+
@Override
269+
@Transactional(readOnly = true)
270+
public List<ChatRoomDto> myHeartRoomList(Long userId, Pageable pageable) {
271+
getUser(userId);
272+
List<Heart> heart = heartRepository.findByUserId(userId);
273+
if (heart.isEmpty()) {
274+
throw new CustomException(ErrorCode.NOT_FOUND_HEART);
275+
}
276+
List<Long> ids = new ArrayList<>();
277+
for(Heart heart1 : heart) {
278+
Long id = heart1.getChatRoom().getId();
279+
ids.add(id);
280+
}
281+
Page<ChatRoom> chatRoomByInId = chatRoomRepository.findChatRoomByInId(ids, pageable);
282+
List<ChatRoom> chatRoomList = chatRoomByInId.toList();
283+
List<ChatRoomDto> chatRoomDtos = new ArrayList<>();
284+
for (ChatRoom chatRoom : chatRoomList) {
285+
ChatRoomDto build = ChatRoomDto.builder()
286+
.id(chatRoom.getId())
287+
.title(chatRoom.getTitle())
288+
.heartCount(chatRoom.getHearts().size())
289+
.currentUserCount((long) chatRoom.getUserChatRooms().size())
290+
.userCountMax(chatRoom.getUserCountMax())
291+
.build();
292+
chatRoomDtos.add(build);
293+
}
294+
return chatRoomDtos;
295+
}
264296
}

src/main/java/cmf/commitField/domain/heart/repository/HeartRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44
import org.springframework.data.jpa.repository.JpaRepository;
55
import org.springframework.stereotype.Repository;
66

7+
import java.util.List;
78
import java.util.Optional;
89

910
@Repository
1011
public interface HeartRepository extends JpaRepository<Heart, Long> {
1112
Optional<Heart> findByUserIdAndChatRoomId(Long userId, Long chatRoomId);
13+
14+
List<Heart> findByUserId(Long userId);
1215
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ public enum ErrorCode {
6666

6767
//Heart
6868
NOT_EXIST_ROOM_HEART(HttpStatus.BAD_REQUEST, "해당 채팅방에 좋아요가 눌러져 있지 않습니다."),
69-
ALREADY_HEART_TO_ROOM(HttpStatus.BAD_REQUEST, "이미 해당 채팅방에 좋아요를 누르셨습니다.");
70-
69+
ALREADY_HEART_TO_ROOM(HttpStatus.BAD_REQUEST, "이미 해당 채팅방에 좋아요를 누르셨습니다."),
70+
NOT_FOUND_HEART(HttpStatus.NOT_FOUND, "좋아요 누른 채팅방이 없습니다.");
7171

7272
private final HttpStatus httpStatus;
7373
private final String message;

0 commit comments

Comments
 (0)