Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[add] 채팅방 입장시 dto에 유저 정보 추가 #163

Merged
merged 5 commits into from
Feb 3, 2025
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 @@ -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;
Expand Down Expand Up @@ -53,22 +54,31 @@ public static ChatRoomResponseDto ofWithOffline(List<ChatMemberResponseDto> part

@Getter
public static class ChatMemberResponseDto {
private Long memberId;
private String nickname;
private Mbti mbti;
private String profileImageUrl;
private ParticipantRole role;
private Boolean isMine;

@Builder
private ChatMemberResponseDto(String nickname, Mbti mbti, String profileImageUrl) {
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(Member member) {
public static ChatMemberResponseDto of(MeetingParticipant participant, Boolean isMine) {
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())
.isMine(isMine)
.build();
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -26,6 +28,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;
Expand All @@ -46,6 +49,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) {
Expand All @@ -70,19 +74,23 @@ 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<ChatRoomResponseDto.ChatMemberResponseDto> participants = chatRoom.getParticipant()
List<ChatRoomResponseDto.ChatMemberResponseDto> participants = Optional.ofNullable(meetingParticipantRepository.findByMeeting(meeting))
.orElseThrow(() -> new CommonException(ErrorCode.USER_NOT_FOUND))
.stream()
.map(memberChatRoom -> ChatRoomResponseDto.ChatMemberResponseDto.from(memberChatRoom.getMember()))
.map(meetingParticipant -> {
Boolean isMine = Objects.equals(mine.getMemberId(), meetingParticipant.getMember().getMemberId());
return ChatRoomResponseDto.ChatMemberResponseDto.of(meetingParticipant, isMine);
})
.collect(Collectors.toList());

Slice<ChatMessageResponseDto> 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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,12 @@ public class MeetingDetailResponseDto {
private Boolean isOwner;
private Boolean isCurrentUser;
private List<ParticipantDto> 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<ParticipantDto> participants) {
String backgroundImage, Boolean isOwner, Boolean isCurrentUser, List<ParticipantDto> participants, Long chatRoomId) {
this.meetingType = meetingType;
this.meetingName = meetingName;
this.meetingDescription = meetingDescription;
Expand All @@ -35,6 +36,7 @@ private MeetingDetailResponseDto(String meetingType, String meetingName, String
this.isOwner = isOwner;
this.isCurrentUser = isCurrentUser;
this.participants = participants;
this.chatRoomId = chatRoomId;
}

@Getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

Expand Down