99import ita .tinybite .domain .chat .entity .ChatRoom ;
1010import ita .tinybite .domain .chat .entity .ChatRoomMember ;
1111import ita .tinybite .domain .chat .enums .ChatRoomType ;
12+ import ita .tinybite .domain .chat .enums .ParticipantType ;
1213import ita .tinybite .domain .chat .repository .ChatMessageRepository ;
1314import ita .tinybite .domain .chat .repository .ChatRoomMemberRepository ;
1415import ita .tinybite .domain .chat .repository .ChatRoomRepository ;
15- import ita .tinybite .domain .party .entity .Party ;
1616import ita .tinybite .domain .party .entity .PartyParticipant ;
1717import ita .tinybite .domain .party .enums .ParticipantStatus ;
1818import 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