Skip to content
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 @@ -49,7 +49,7 @@ public static DmRoomSummaryDto fromOtherUser(Long userId, DirectMessage message)
.build();
}

public void setImageUrl(String url) {
public void otherUserImageUrl(String url) {
this.otherUserImageUrl = url;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,10 @@ public DmRoomListResponse getRooms(Long userId, Long cursor, int size) {
List<DmRoomSummaryDto> messages = latest.stream()
.map(message -> {
DmRoomSummaryDto dto = DmRoomSummaryDto.fromOtherUser(userId, message);
dto.setImageUrl(s3Service.getPresignedGetUrl(message.getSender().getProfileImageName()));
User otherUser = userId.equals(message.getSender().getUserId())
? message.getReceiver()
: message.getSender();
dto.otherUserImageUrl(s3Service.getPresignedGetUrl(otherUser.getProfileImageName()));
return dto;
})
.toList();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,35 @@
import com.nect.api.domain.team.chat.dto.res.ChatNoticeResponseDto;
import com.nect.api.domain.team.chat.dto.res.ChatRoomResponseDto;
import com.nect.api.domain.team.chat.dto.res.ProjectMemberResponseDto;
import com.nect.api.global.infra.S3Service;
import com.nect.core.entity.team.Project;
import com.nect.core.entity.team.chat.ChatMessage;
import com.nect.core.entity.team.chat.ChatRoom;
import com.nect.core.entity.team.chat.ChatRoomUser;
import com.nect.core.entity.user.User;
import com.nect.core.entity.team.chat.enums.ChatRoomType;
import com.nect.core.entity.team.chat.enums.MessageType;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

@Component
@RequiredArgsConstructor
public class ChatConverter {


private final S3Service s3Service;

//ChatMessage -> ChatMessageDto
public static ChatMessageDto toMessageDto(ChatMessage message) {
public ChatMessageDto toMessageDto(ChatMessage message) {
return ChatMessageDto.builder()
.messageId(message.getId())
.roomId(message.getChatRoom().getId())
.userId(message.getUser().getUserId())
.userName(message.getUser().getName())
.profileImage(message.getUser().getProfileImageName())
.profileImage(s3Service.getPresignedGetUrl(message.getUser().getProfileImageName()))
.content(message.getContent())
.messageType(message.getMessageType())
.isPinned(message.getIsPinned())
Expand All @@ -39,7 +42,7 @@ public static ChatMessageDto toMessageDto(ChatMessage message) {
}

//DTO -> ChatMessage
public static ChatMessage toMessage(ChatMessageDto dto, User user, ChatRoom chatRoom) {
public ChatMessage toMessage(ChatMessageDto dto, User user, ChatRoom chatRoom) {
return ChatMessage.builder()
.chatRoom(chatRoom)
.user(user)
Expand All @@ -50,7 +53,7 @@ public static ChatMessage toMessage(ChatMessageDto dto, User user, ChatRoom chat
}

//텍스트 메시지 생성
public static ChatMessage toTextMessage(ChatRoom chatRoom, User user, String content) {
public ChatMessage toTextMessage(ChatRoom chatRoom, User user, String content) {
return ChatMessage.builder()
.chatRoom(chatRoom)
.user(user)
Expand All @@ -62,7 +65,7 @@ public static ChatMessage toTextMessage(ChatRoom chatRoom, User user, String con

//ChatRoom 변환
//ChatRoom-> DTO
public static ChatRoomDto toRoomDto(ChatRoom room) {
public ChatRoomDto toRoomDto(ChatRoom room) {
ChatRoomDto dto = new ChatRoomDto();
dto.setRoomId(room.getId());
dto.setProjectId(room.getProject() != null ? room.getProject().getId() : null);
Expand All @@ -72,7 +75,7 @@ public static ChatRoomDto toRoomDto(ChatRoom room) {
return dto;
}
//ChatRoom -> >DTO(멤버포함)
public static ChatRoomDto toRoomDto(ChatRoom room, List<ChatRoomUser> members) {
public ChatRoomDto toRoomDto(ChatRoom room, List<ChatRoomUser> members) {
ChatRoomDto dto = toRoomDto(room);

// ChatRoomMember에서 userId 추출
Expand All @@ -84,15 +87,15 @@ public static ChatRoomDto toRoomDto(ChatRoom room, List<ChatRoomUser> members) {
return dto;
}

public static ChatRoom toChatRoomEntity(Project project, String roomName, ChatRoomType type) {
public ChatRoom toChatRoomEntity(Project project, String roomName, ChatRoomType type) {
ChatRoom chatRoom = new ChatRoom();
chatRoom.setProject(project);
chatRoom.setName(roomName);
chatRoom.setType(type);
return chatRoom;
}

public static ChatRoomUser toChatRoomMemberEntity(ChatRoom chatRoom, User user, LocalDateTime lastReadAt) {
public ChatRoomUser toChatRoomMemberEntity(ChatRoom chatRoom, User user, LocalDateTime lastReadAt) {
ChatRoomUser member = new ChatRoomUser();
member.setChatRoom(chatRoom);
member.setUser(user);
Expand All @@ -103,7 +106,7 @@ public static ChatRoomUser toChatRoomMemberEntity(ChatRoom chatRoom, User user,
return member;
}

public static ChatRoomResponseDto toResponseDTO(ChatRoom chatRoom, List<String> profileImages) {
public ChatRoomResponseDto toResponseDTO(ChatRoom chatRoom, List<String> profileImages) {
return ChatRoomResponseDto.builder()
.roomId(chatRoom.getId())
.projectId(chatRoom.getProject() != null ? chatRoom.getProject().getId() : null)
Expand All @@ -114,22 +117,22 @@ public static ChatRoomResponseDto toResponseDTO(ChatRoom chatRoom, List<String>
.build();
}

public static ProjectMemberResponseDto toProjectMemberResponseDTO(User user) {
public ProjectMemberResponseDto toProjectMemberResponseDTO(User user) {
return ProjectMemberResponseDto.builder()
.userId(user.getUserId())
.username(user.getNickname())
.build();
}

public static List<ProjectMemberResponseDto> toProjectMemberResponseDTOList(List<User> users) {
public List<ProjectMemberResponseDto> toProjectMemberResponseDTOList(List<User> users) {
return users.stream()
.map(ChatConverter::toProjectMemberResponseDTO)
.map(this::toProjectMemberResponseDTO)
.collect(Collectors.toList());
}


//ChatMessage -> ChatNoticeResponseDTO
public static ChatNoticeResponseDto toNoticeResponseDTO(ChatMessage message) {
public ChatNoticeResponseDto toNoticeResponseDTO(ChatMessage message) {
return ChatNoticeResponseDto.builder()
.messageId(message.getId())
.roomId(message.getChatRoom().getId())
Expand All @@ -143,7 +146,7 @@ public static ChatNoticeResponseDto toNoticeResponseDTO(ChatMessage message) {
}


public static List<ChatRoomUser> toChatRoomUserList(ChatRoom chatRoom, List<User> users) {
public List<ChatRoomUser> toChatRoomUserList(ChatRoom chatRoom, List<User> users) {
return users.stream()
.map(user -> {
ChatRoomUser chatRoomUser = new ChatRoomUser();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,21 @@
import com.nect.core.entity.team.chat.enums.MessageType;
import com.nect.core.entity.user.User;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.stream.Collectors;

import static com.nect.api.domain.team.chat.converter.ChatConverter.toMessageDto;

@Component
@RequiredArgsConstructor
public class FileConverter {

private final ChatConverter chatConverter;


// ChatFile Entity -> ChatFileUploadResponseDTO
public static ChatFileUploadResponseDto toFileUploadResponseDTO(ChatFile chatFile) {
public ChatFileUploadResponseDto toFileUploadResponseDTO(ChatFile chatFile) {
return new ChatFileUploadResponseDto(
chatFile.getId(),
chatFile.getOriginalFileName(),
Expand All @@ -31,16 +36,16 @@ public static ChatFileUploadResponseDto toFileUploadResponseDTO(ChatFile chatFil
}


public static ChatMessageDto toFileMessageDto(ChatMessage message, ChatFile chatFile) {
public ChatMessageDto toFileMessageDto(ChatMessage message, ChatFile chatFile) {
// 기본 메시지 정보 변환
ChatMessageDto dto = toMessageDto(message);
ChatMessageDto dto = chatConverter.toMessageDto(message);
// 파일 정보 추가
dto.setFileInfo(FileConverter.toFileUploadResponseDTO(chatFile));
dto.setFileInfo(toFileUploadResponseDTO(chatFile));
return dto;
}

//파일 메시지 엔티티 생성
public static ChatMessage toFileMessage(ChatRoom chatRoom, User user) {
public ChatMessage toFileMessage(ChatRoom chatRoom, User user) {
return ChatMessage.builder()
.chatRoom(chatRoom)
.user(user)
Expand All @@ -51,7 +56,7 @@ public static ChatMessage toFileMessage(ChatRoom chatRoom, User user) {
}

// ChatFile 엔티티 생성
public static ChatFile toFileEntity(
public ChatFile toFileEntity(
String originalFileName,
String storedFileName,
String fileUrl,
Expand All @@ -70,7 +75,7 @@ public static ChatFile toFileEntity(
}

// 사진첩 조회를 위한 단건 DTO 변환
public static ChatFileResponseDto toFileResponseDto(ChatFile chatFile) {
public ChatFileResponseDto toFileResponseDto(ChatFile chatFile) {
return new ChatFileResponseDto(
chatFile.getId(),
chatFile.getOriginalFileName(),
Expand All @@ -80,13 +85,13 @@ public static ChatFileResponseDto toFileResponseDto(ChatFile chatFile) {
}

// 파일 조회를 위한 리스트 DTO 변환 (스트림 로직 이동)
public static List<ChatFileResponseDto> toFileResponseDtoList(List<ChatFile> chatFiles) {
public List<ChatFileResponseDto> toFileResponseDtoList(List<ChatFile> chatFiles) {
return chatFiles.stream()
.map(FileConverter::toFileResponseDto)
.map(this::toFileResponseDto)
.collect(Collectors.toList());
}

public static ChatRoomAlbumResponseDto toChatRoomAlbumDto(
public ChatRoomAlbumResponseDto toChatRoomAlbumDto(
ChatRoom room,
List<ChatFile> files,
int totalFileCount) {
Expand All @@ -99,7 +104,7 @@ public static ChatRoomAlbumResponseDto toChatRoomAlbumDto(
toFileResponseDtoList(files)
);
}
public static ChatRoomAlbumDetailDto toChatRoomAlbumDetailDto(
public ChatRoomAlbumDetailDto toChatRoomAlbumDetailDto(
ChatRoom room,
List<ChatFile> files,
int totalCount,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public class ChatFileService {
private final ProjectUserRepository projectUserRepository;
private final ProjectRepository projectRepository;
private final SharedDocumentRepository sharedDocumentRepository;
private final FileConverter fileConverter;


private String uploadDir;
Expand All @@ -81,10 +82,10 @@ public ChatMessageDto uploadAndSendFile(Long roomId, MultipartFile file, Long us
String storedFileName = s3Service.uploadFile(file);
String fileUrl = getSafePresignedUrl(storedFileName);

ChatMessage message = FileConverter.toFileMessage(chatRoom, user);
ChatMessage message = fileConverter.toFileMessage(chatRoom, user);
chatMessageRepository.save(message);

ChatFile chatFile = FileConverter.toFileEntity(
ChatFile chatFile = fileConverter.toFileEntity(
file.getOriginalFilename(),
storedFileName,
fileUrl,
Expand All @@ -99,7 +100,7 @@ public ChatMessageDto uploadAndSendFile(Long roomId, MultipartFile file, Long us
chatRoomUser.setLastReadAt(LocalDateTime.now());

// 7. DTO 변환
ChatMessageDto messageDto = FileConverter.toFileMessageDto(message, chatFile);
ChatMessageDto messageDto = fileConverter.toFileMessageDto(message, chatFile);

int totalMembers = chatRoomUserRepository.countByChatRoomId(roomId);
messageDto.setReadCount(totalMembers - 1);
Expand Down Expand Up @@ -152,7 +153,7 @@ public List<ChatRoomAlbumResponseDto> getChatAlbum(Long projectId, int limitPerR

List<ChatFile> filesWithRefreshedUrls = refreshPresignedUrls(chatFiles);

return FileConverter.toChatRoomAlbumDto(
return fileConverter.toChatRoomAlbumDto(
room,
filesWithRefreshedUrls,
totalFileCount);
Expand Down Expand Up @@ -187,7 +188,7 @@ public ChatRoomAlbumDetailDto getChatRoomAlbumDetail(Long roomId, int page, int
int totalPages = (int) Math.ceil((double) totalCount / size);
boolean hasNext = page < totalPages - 1;

return FileConverter.toChatRoomAlbumDetailDto(
return fileConverter.toChatRoomAlbumDetailDto(
chatRoom,
filesWithRefreshedUrls,
totalCount,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ public class ChatService {
private final RedisPublisher redisPublisher;
private final UserRepository userRepository;
private final ChatFileRepository chatFileRepository;
private final ChatConverter chatConverter;
private final FileConverter fileConverter;

@Transactional
public ChatMessageDto sendMessage(Long roomId, Long userId, String content) {
Expand All @@ -58,7 +60,7 @@ public ChatMessageDto sendMessage(Long roomId, Long userId, String content) {
.orElseThrow(() -> new ChatException(ChatErrorCode.CHAT_MEMBER_NOT_FOUND));

// 메시지 생성 및 저장
ChatMessage message = ChatConverter.toTextMessage(chatRoom, user, content);
ChatMessage message = chatConverter.toTextMessage(chatRoom, user, content);
chatMessageRepository.save(message);

// 발신자의 lastReadMessageId 업데이트 (본인은 이미 읽음)
Expand All @@ -70,7 +72,7 @@ public ChatMessageDto sendMessage(Long roomId, Long userId, String content) {
senderRoomUser.setLastReadAt(LocalDateTime.now());

// DTO 변환
ChatMessageDto messageDto = ChatConverter.toMessageDto(message);
ChatMessageDto messageDto = chatConverter.toMessageDto(message);

//Redis 발행
String channel = "chatroom:" + roomId;
Expand Down Expand Up @@ -140,12 +142,12 @@ public ChatRoomMessagesResponseDto getChatMessages(Long roomId, Long userId,Long
Optional<ChatFile> fileOpt = chatFileRepository
.findByChatMessageId(message.getId());
if (fileOpt.isPresent()) {
dto = FileConverter.toFileMessageDto(message, fileOpt.get());
dto = fileConverter.toFileMessageDto(message, fileOpt.get());
} else {
dto = ChatConverter.toMessageDto(message);
dto = chatConverter.toMessageDto(message);
}
} else {
dto = ChatConverter.toMessageDto(message);
dto = chatConverter.toMessageDto(message);
}

// readCount = 안 읽은 사람 수
Expand Down Expand Up @@ -190,7 +192,7 @@ public ChatNoticeResponseDto createNotice(Long messageId, Boolean isPinned,Long

message.setIsPinned(isPinned);

return ChatConverter.toNoticeResponseDTO(message);
return chatConverter.toNoticeResponseDTO(message);
}


Expand All @@ -217,7 +219,7 @@ public ChatMessageSearchResponseDto searchMessages(


List<ChatMessageDto> messageDtos = messagesPage.getContent().stream()
.map(ChatConverter::toMessageDto)
.map(chatConverter::toMessageDto)
.collect(Collectors.toList());


Expand Down
Loading