From 7df5592f30eb9b5797fc965a2e29f5469738f424 Mon Sep 17 00:00:00 2001 From: Dongyun Kim Date: Mon, 3 Feb 2025 19:49:15 +0900 Subject: [PATCH 1/5] =?UTF-8?q?[add]=20#162=20=EB=AF=B8=ED=8C=85=20?= =?UTF-8?q?=EC=84=B8=EB=B6=80=20=EC=82=AC=ED=95=AD=EC=97=90=20=EC=B1=84?= =?UTF-8?q?=ED=8C=85=EB=B0=A9=20id=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatmate/app/domain/meeting/service/MeetingService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/example/eatmate/app/domain/meeting/service/MeetingService.java b/src/main/java/com/example/eatmate/app/domain/meeting/service/MeetingService.java index acd2a3e2..d7372549 100644 --- a/src/main/java/com/example/eatmate/app/domain/meeting/service/MeetingService.java +++ b/src/main/java/com/example/eatmate/app/domain/meeting/service/MeetingService.java @@ -287,6 +287,7 @@ public MeetingDetailResponseDto getMeetingDetail(Long meetingId, UserDetails use .isOwner(isOwner(meeting, member.getMemberId())) .isCurrentUser(isCurrentUser(meeting, member)) .participants(participants) + .chatRoomId(meeting.getChatRoom().getId()) .build(); } From 850251739f4b63c77d6a091e6a64def95e43a67b Mon Sep 17 00:00:00 2001 From: Dongyun Kim Date: Mon, 3 Feb 2025 19:49:32 +0900 Subject: [PATCH 2/5] =?UTF-8?q?[add]=20#162=20=EB=AF=B8=ED=8C=85=20?= =?UTF-8?q?=EC=84=B8=EB=B6=80=20=EC=82=AC=ED=95=ADdto=EC=97=90=20=EC=B1=84?= =?UTF-8?q?=ED=8C=85=EB=B0=A9=20id=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/domain/meeting/dto/MeetingDetailResponseDto.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/eatmate/app/domain/meeting/dto/MeetingDetailResponseDto.java b/src/main/java/com/example/eatmate/app/domain/meeting/dto/MeetingDetailResponseDto.java index 6bdd4b36..bddd6c0f 100644 --- a/src/main/java/com/example/eatmate/app/domain/meeting/dto/MeetingDetailResponseDto.java +++ b/src/main/java/com/example/eatmate/app/domain/meeting/dto/MeetingDetailResponseDto.java @@ -20,11 +20,12 @@ public class MeetingDetailResponseDto { private Boolean isOwner; private Boolean isCurrentUser; private List participants; + private Long chatRoomId; @Builder private MeetingDetailResponseDto(String meetingType, String meetingName, String meetingDescription, GenderRestriction genderRestriction, String location, LocalDateTime dueDateTime, - String backgroundImage, Boolean isOwner, Boolean isCurrentUser, List participants) { + String backgroundImage, Boolean isOwner, Boolean isCurrentUser, List participants, Long chatRoomId) { this.meetingType = meetingType; this.meetingName = meetingName; this.meetingDescription = meetingDescription; @@ -35,6 +36,7 @@ private MeetingDetailResponseDto(String meetingType, String meetingName, String this.isOwner = isOwner; this.isCurrentUser = isCurrentUser; this.participants = participants; + this.chatRoomId = chatRoomId; } @Getter From cb3672b3f548df65690a4f7d09f1874947b7f8fa Mon Sep 17 00:00:00 2001 From: Dongyun Kim Date: Mon, 3 Feb 2025 19:51:01 +0900 Subject: [PATCH 3/5] =?UTF-8?q?[add]=20#162=20=ED=95=84=EC=9A=94=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/ChatRoomResponseDto.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/example/eatmate/app/domain/chatRoom/dto/response/ChatRoomResponseDto.java b/src/main/java/com/example/eatmate/app/domain/chatRoom/dto/response/ChatRoomResponseDto.java index 4d09dee3..4b89712a 100644 --- a/src/main/java/com/example/eatmate/app/domain/chatRoom/dto/response/ChatRoomResponseDto.java +++ b/src/main/java/com/example/eatmate/app/domain/chatRoom/dto/response/ChatRoomResponseDto.java @@ -5,8 +5,9 @@ import org.springframework.data.domain.Slice; import com.example.eatmate.app.domain.chat.dto.response.ChatMessageResponseDto; +import com.example.eatmate.app.domain.meeting.domain.MeetingParticipant; +import com.example.eatmate.app.domain.meeting.domain.ParticipantRole; import com.example.eatmate.app.domain.member.domain.Mbti; -import com.example.eatmate.app.domain.member.domain.Member; import lombok.Builder; import lombok.Getter; @@ -53,22 +54,28 @@ public static ChatRoomResponseDto ofWithOffline(List part @Getter public static class ChatMemberResponseDto { + private Long memberId; private String nickname; private Mbti mbti; private String profileImageUrl; + private ParticipantRole role; @Builder - private ChatMemberResponseDto(String nickname, Mbti mbti, String profileImageUrl) { + private ChatMemberResponseDto(Long memberId, String nickname, Mbti mbti, String profileImageUrl, ParticipantRole role) { + this.memberId = memberId; this.nickname = nickname; this.mbti = mbti; this.profileImageUrl = profileImageUrl; + this.role = role; } - public static ChatMemberResponseDto from(Member member) { + public static ChatMemberResponseDto from(MeetingParticipant participant) { return ChatMemberResponseDto.builder() - .nickname(member.getNickname()) - .mbti(member.getMbti()) - .profileImageUrl(member.getProfileImage().getImageUrl()) + .memberId(participant.getMember().getMemberId()) + .nickname(participant.getMember().getNickname()) + .mbti(participant.getMember().getMbti()) + .profileImageUrl(participant.getMember().getProfileImage().getImageUrl()) + .role(participant.getRole()) .build(); } } From 664259d89de1433eab935c909f7b7ad68e92f7ee Mon Sep 17 00:00:00 2001 From: Dongyun Kim Date: Mon, 3 Feb 2025 19:51:21 +0900 Subject: [PATCH 4/5] =?UTF-8?q?[add]=20=ED=95=84=EC=9A=94=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=B6=94=EA=B0=80=20=EB=B0=98=ED=99=98=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/domain/chatRoom/service/ChatRoomService.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/example/eatmate/app/domain/chatRoom/service/ChatRoomService.java b/src/main/java/com/example/eatmate/app/domain/chatRoom/service/ChatRoomService.java index 1dafe4fc..a7ac9c72 100644 --- a/src/main/java/com/example/eatmate/app/domain/chatRoom/service/ChatRoomService.java +++ b/src/main/java/com/example/eatmate/app/domain/chatRoom/service/ChatRoomService.java @@ -26,6 +26,7 @@ import com.example.eatmate.app.domain.meeting.domain.DeliveryMeeting; import com.example.eatmate.app.domain.meeting.domain.Meeting; import com.example.eatmate.app.domain.meeting.domain.OfflineMeeting; +import com.example.eatmate.app.domain.meeting.domain.repository.MeetingParticipantRepository; import com.example.eatmate.app.domain.member.domain.Member; import com.example.eatmate.global.common.util.SecurityUtils; import com.example.eatmate.global.config.error.ErrorCode; @@ -46,6 +47,7 @@ public class ChatRoomService { private final QueueManager queueManager; private final SecurityUtils securityUtils; private final ApplicationEventPublisher eventPublisher; + private final MeetingParticipantRepository meetingParticipantRepository; //채팅방 생성 + 호스트 채팅방 참가 public ChatRoom createChatRoom(Member host, Meeting meeting) { @@ -73,16 +75,16 @@ public ChatRoomResponseDto enterChatRoomAndLoadMessage(Long chatRoomId, UserDeta securityUtils.getMember(userDetails); ChatRoom chatRoom = chatRoomRepository.findByIdAndDeletedStatus(chatRoomId, DeletedStatus.NOT_DELETED) .orElseThrow(() -> new CommonException(ErrorCode.CHATROOM_NOT_FOUND)); + Meeting meeting = chatRoom.getMeeting(); - List participants = chatRoom.getParticipant() + List participants = meetingParticipantRepository.findByMeeting(meeting) .stream() - .map(memberChatRoom -> ChatRoomResponseDto.ChatMemberResponseDto.from(memberChatRoom.getMember())) + .map(ChatRoomResponseDto.ChatMemberResponseDto::from) .collect(Collectors.toList()); Slice chatList = chatService.loadChat(chatRoomId, null, pageable); //채팅방 공지 처리 - Meeting meeting = chatRoom.getMeeting(); if (meeting instanceof OfflineMeeting) { OfflineMeeting offlineMeeting = (OfflineMeeting) meeting; ChatRoomOfflineNoticeDto notice = ChatRoomOfflineNoticeDto.of(offlineMeeting.getMeetingPlace(), offlineMeeting.getMeetingDate()); From d7fac341b36f68675fd4252dfe27cf9286654882 Mon Sep 17 00:00:00 2001 From: Dongyun Kim Date: Mon, 3 Feb 2025 21:42:01 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[add]=20#162=20=EB=B3=B8=EC=9D=B8=20?= =?UTF-8?q?=ED=99=95=EC=9D=B8=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chatRoom/dto/response/ChatRoomResponseDto.java | 7 +++++-- .../app/domain/chatRoom/service/ChatRoomService.java | 12 +++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/example/eatmate/app/domain/chatRoom/dto/response/ChatRoomResponseDto.java b/src/main/java/com/example/eatmate/app/domain/chatRoom/dto/response/ChatRoomResponseDto.java index 4b89712a..7e54fecd 100644 --- a/src/main/java/com/example/eatmate/app/domain/chatRoom/dto/response/ChatRoomResponseDto.java +++ b/src/main/java/com/example/eatmate/app/domain/chatRoom/dto/response/ChatRoomResponseDto.java @@ -59,23 +59,26 @@ public static class ChatMemberResponseDto { private Mbti mbti; private String profileImageUrl; private ParticipantRole role; + private Boolean isMine; @Builder - private ChatMemberResponseDto(Long memberId, String nickname, Mbti mbti, String profileImageUrl, ParticipantRole role) { + private ChatMemberResponseDto(Long memberId, String nickname, Mbti mbti, String profileImageUrl, ParticipantRole role, Boolean isMine) { this.memberId = memberId; this.nickname = nickname; this.mbti = mbti; this.profileImageUrl = profileImageUrl; this.role = role; + this.isMine = isMine; } - public static ChatMemberResponseDto from(MeetingParticipant participant) { + public static ChatMemberResponseDto of(MeetingParticipant participant, Boolean isMine) { return ChatMemberResponseDto.builder() .memberId(participant.getMember().getMemberId()) .nickname(participant.getMember().getNickname()) .mbti(participant.getMember().getMbti()) .profileImageUrl(participant.getMember().getProfileImage().getImageUrl()) .role(participant.getRole()) + .isMine(isMine) .build(); } } diff --git a/src/main/java/com/example/eatmate/app/domain/chatRoom/service/ChatRoomService.java b/src/main/java/com/example/eatmate/app/domain/chatRoom/service/ChatRoomService.java index a7ac9c72..d24e7fa2 100644 --- a/src/main/java/com/example/eatmate/app/domain/chatRoom/service/ChatRoomService.java +++ b/src/main/java/com/example/eatmate/app/domain/chatRoom/service/ChatRoomService.java @@ -1,6 +1,8 @@ package com.example.eatmate.app.domain.chatRoom.service; import java.util.List; +import java.util.Objects; +import java.util.Optional; import java.util.stream.Collectors; import org.springframework.context.ApplicationEventPublisher; @@ -72,14 +74,18 @@ public void joinChatRoom(Long meetingId, UserDetails userDetails) { //채팅방 입장(지난 로딩 위치는 클라이언트에서 조절) public ChatRoomResponseDto enterChatRoomAndLoadMessage(Long chatRoomId, UserDetails userDetails, Pageable pageable) { - securityUtils.getMember(userDetails); + Member mine = securityUtils.getMember(userDetails); ChatRoom chatRoom = chatRoomRepository.findByIdAndDeletedStatus(chatRoomId, DeletedStatus.NOT_DELETED) .orElseThrow(() -> new CommonException(ErrorCode.CHATROOM_NOT_FOUND)); Meeting meeting = chatRoom.getMeeting(); - List participants = meetingParticipantRepository.findByMeeting(meeting) + List participants = Optional.ofNullable(meetingParticipantRepository.findByMeeting(meeting)) + .orElseThrow(() -> new CommonException(ErrorCode.USER_NOT_FOUND)) .stream() - .map(ChatRoomResponseDto.ChatMemberResponseDto::from) + .map(meetingParticipant -> { + Boolean isMine = Objects.equals(mine.getMemberId(), meetingParticipant.getMember().getMemberId()); + return ChatRoomResponseDto.ChatMemberResponseDto.of(meetingParticipant, isMine); + }) .collect(Collectors.toList()); Slice chatList = chatService.loadChat(chatRoomId, null, pageable);