Skip to content

Commit 4befa02

Browse files
committed
hotfix : 채팅방 그룹 채팅 필터링 및 oneToOneChatRoom targetUser 로직 수정
1 parent bf4c52b commit 4befa02

2 files changed

Lines changed: 24 additions & 15 deletions

File tree

src/main/java/ita/tinybite/domain/chat/dto/res/OneToOneChatRoomDetailResDto.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,7 @@ public record OneToOneChatRoomDetailResDto(
2525
String partyTitle
2626
) {
2727

28-
public static OneToOneChatRoomDetailResDto of(Party party, PartyParticipant partyParticipant, User currentUser, ChatRoom groupChatRoom, User participant) {
29-
User host = partyParticipant.getParty().getHost();
30-
31-
ParticipantType type = currentUser.getUserId().equals(host.getUserId()) ? ParticipantType.HOST : ParticipantType.PARTICIPANT;
32-
User targetUser = currentUser.getUserId().equals(participant.getUserId()) ? host : participant; // 상대방의 유저 (호스트면 참여자 / 참여자면 호스트)
28+
public static OneToOneChatRoomDetailResDto of(Party party, PartyParticipant partyParticipant, ChatRoom groupChatRoom, User targetUser, ParticipantType type) {
3329
ParticipantStatus participantStatus = partyParticipant.getStatus();
3430

3531
OneToOneChatRoomDetailResDtoBuilder resDtoBuilder = OneToOneChatRoomDetailResDto.builder()

src/main/java/ita/tinybite/domain/chat/service/ChatRoomService.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
import ita.tinybite.domain.chat.entity.ChatRoom;
1010
import ita.tinybite.domain.chat.entity.ChatRoomMember;
1111
import ita.tinybite.domain.chat.enums.ChatRoomType;
12+
import ita.tinybite.domain.chat.enums.ParticipantType;
1213
import ita.tinybite.domain.chat.repository.ChatMessageRepository;
1314
import ita.tinybite.domain.chat.repository.ChatRoomMemberRepository;
1415
import ita.tinybite.domain.chat.repository.ChatRoomRepository;
15-
import ita.tinybite.domain.party.entity.Party;
1616
import ita.tinybite.domain.party.entity.PartyParticipant;
1717
import ita.tinybite.domain.party.enums.ParticipantStatus;
1818
import ita.tinybite.domain.party.repository.PartyParticipantRepository;
@@ -40,10 +40,10 @@ public class ChatRoomService {
4040

4141

4242
public List<OneToOneChatRoomResDto> getOneToOneRooms() {
43-
User user = securityProvider.getCurrentUser();
43+
User currentUser = securityProvider.getCurrentUser();
4444

4545
// 유저가 참여 중인 chatRoom (이면서 일대일 채팅만)
46-
List<ChatRoom> chatRooms = chatRoomMemberRepository.findByUser(user).stream()
46+
List<ChatRoom> chatRooms = chatRoomMemberRepository.findByUser(currentUser).stream()
4747
.map(ChatRoomMember::getChatRoom)
4848
.filter(chatRoom -> chatRoom.getType().equals(ChatRoomType.ONE_TO_ONE)).toList();
4949

@@ -61,15 +61,20 @@ public List<OneToOneChatRoomResDto> getOneToOneRooms() {
6161
PartyParticipant partyParticipant = partyParticipantRepository.findByOneToOneChatRoom(chatRoom).orElseThrow();
6262
ParticipantStatus status = partyParticipant.getStatus();
6363

64-
User targetUser = partyParticipant.getUser();
65-
ChatRoomMember chatRoomMember = chatRoomMemberRepository.findByChatRoomAndUser(chatRoom, user).orElseThrow();
64+
// 호스트 - 참여자 엔티티
65+
User partyParticipantUser = partyParticipant.getUser();
66+
User host = chatRoom.getParty().getHost();
67+
68+
ChatRoomMember chatRoomMember = chatRoomMemberRepository.findByChatRoomAndUser(chatRoom, currentUser).orElseThrow();
6669

6770
// 마지막으로 읽은 시점을 기점으로 몇 개의 메시지가 안 읽혔는지 확인
68-
long unreadCnt = chatMessageRepository.countByChatRoomIdAndCreatedAtAfterAndSenderIdNot(chatRoom.getId(), chatRoomMember.getLastReadAt(), user.getUserId());
71+
long unreadCnt = chatMessageRepository.countByChatRoomIdAndCreatedAtAfterAndSenderIdNot(chatRoom.getId(), chatRoomMember.getLastReadAt(), currentUser.getUserId());
6972

7073
String content = recentMessage != null ? recentMessage.getContent() : "";
71-
// dto로 합침
72-
return OneToOneChatRoomResDto.of(chatRoom, user, targetUser, content, timeAgo, status, unreadCnt);
74+
75+
// 현재 유저가 참여자라면, targetUser는 호스트
76+
User targetUser = currentUser.getUserId().equals(partyParticipantUser.getUserId()) ? host : partyParticipantUser;
77+
return OneToOneChatRoomResDto.of(chatRoom, currentUser, targetUser, content, timeAgo, status, unreadCnt);
7378
})
7479
.toList();
7580
}
@@ -81,7 +86,9 @@ public List<GroupChatRoomResDto> getGroupRooms() {
8186
// 유저가 참여 중인 chatRoom (이면서 그룹 채팅만)
8287
List<ChatRoom> chatRooms = chatRoomMemberRepository.findByUser(user).stream()
8388
.map(ChatRoomMember::getChatRoom)
84-
.filter(chatRoom -> chatRoom.getType().equals(ChatRoomType.GROUP)).toList();
89+
.filter(chatRoom -> chatRoom.getType().equals(ChatRoomType.GROUP))
90+
.filter(chatRoom -> chatRoom.getParticipants().size() > 1)
91+
.toList();
8592

8693
return chatRooms.stream()
8794
.map(chatRoom -> {
@@ -107,10 +114,16 @@ public OneToOneChatRoomDetailResDto getOneToOneRoom(Long chatRoomId) {
107114
if(!chatRoom.getType().equals(ChatRoomType.ONE_TO_ONE)) throw BusinessException.of(ChatRoomErrorCode.NOT_ONE_TO_ONE);
108115

109116
PartyParticipant partyParticipant = partyParticipantRepository.findByOneToOneChatRoom(chatRoom).orElseThrow();
117+
118+
User host = partyParticipant.getParty().getHost();
110119
User participant = partyParticipant.getUser();
111120

121+
// 현재 사용자의 ParticipantType 판단
122+
ParticipantType type = currentUser.getUserId().equals(host.getUserId()) ? ParticipantType.HOST : ParticipantType.PARTICIPANT;
123+
User targetUser = currentUser.getUserId().equals(participant.getUserId()) ? host : participant;
124+
112125
ChatRoom groupChatRoom = chatRoomRepository.findByPartyAndType(chatRoom.getParty(), ChatRoomType.GROUP).orElseGet(null);
113-
return OneToOneChatRoomDetailResDto.of(chatRoom.getParty(), partyParticipant, currentUser, groupChatRoom, participant);
126+
return OneToOneChatRoomDetailResDto.of(chatRoom.getParty(), partyParticipant, groupChatRoom, targetUser, type);
114127
}
115128

116129
public GroupChatRoomDetailResDto getGroupRoom(Long chatRoomId) {

0 commit comments

Comments
 (0)