Skip to content

Commit

Permalink
Merge pull request #186 from dd-jiyun/main
Browse files Browse the repository at this point in the history
메세지함 세부 조회 및 삭제 수정
  • Loading branch information
dd-jiyun authored Mar 20, 2024
2 parents 6d6fbc4 + 69fc518 commit a782713
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ public interface MessageRepository extends JpaRepository<Message, Long> {
List<Message> findBySenderAndReceiverAndDeletedBySenderFalseOrReceiverAndSenderAndDeletedByReceiverFalseOrderBySentAtDesc(
User sender1, User receiver1, User receiver2, User sender2);

List<Message> findBySenderOrReceiverOrderBySentAtDesc(User sender, User receiver);

List<Message> findBySenderAndReceiverAndDeletedBySenderFalse(User currentUser, User selectedUser);
List<Message> findBySenderAndDeletedBySenderFalseOrReceiverAndDeletedByReceiverFalseOrderBySentAtDesc(User sender, User receiver);

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,12 @@
import com.example.titto_backend.message.domain.Message;
import com.example.titto_backend.message.dto.MessageDTO;
import com.example.titto_backend.message.repository.MessageRepository;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Comparator;

@Service
@RequiredArgsConstructor
Expand Down Expand Up @@ -42,68 +40,28 @@ public String writeMessage(MessageDTO.Request request, String email) throws Cust
return "메시지 전송 성공";
}

// 사용자의 주고 받은 메시지 조회
// 서로 주고 받은 메세지 조회
@Transactional
public List<MessageDTO.Response> getBothMessages(String currentUserEmail, Long selectedUserId) {
// 현재 사용자 조회
User currentUser = userRepository.findByEmail(currentUserEmail)
public List<MessageDTO.Response> getBothMessages(String email, Long selectedUserId) {
User user = userRepository.findByEmail(email)
.orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND));

// 선택된 사용자 조회
User selectedUser = userRepository.findById(selectedUserId)
.orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND));

List<Message> sentMessages;
List<Message> receivedMessages;

// 현재 사용자가 보낸 메시지와 받은 메시지를 구분하여 조회
if (currentUser.getId().equals(selectedUserId)) {
// 현재 사용자가 선택한 대상에게 보낸 메시지 조회
sentMessages = messageRepository.findBySenderAndReceiverAndDeletedBySenderFalse(currentUser, selectedUser);
// 현재 사용자가 선택한 대상으로부터 받은 메시지 조회
receivedMessages = messageRepository.findBySenderAndReceiverAndDeletedBySenderFalse(selectedUser,
currentUser);
} else {
// 현재 사용자가 선택한 대상에게 받은 메시지 조회
receivedMessages = messageRepository.findBySenderAndReceiverAndDeletedBySenderFalse(currentUser,
selectedUser);
// 현재 사용자가 선택한 대상에게 보낸 메시지 조회
sentMessages = messageRepository.findBySenderAndReceiverAndDeletedBySenderFalse(selectedUser, currentUser);
}

// 조회된 메시지를 DTO로 변환하여 반환
List<MessageDTO.Response> messagesDTO = new ArrayList<>();
messagesDTO.addAll(convertMessagesToDTO(sentMessages));
messagesDTO.addAll(convertMessagesToDTO(receivedMessages));

// 메시지를 보낸 시간을 기준으로 정렬
messagesDTO.sort(Comparator.comparing(MessageDTO.Response::getSentAt).reversed());
List<Message> messages = messageRepository.findBySenderAndReceiverAndDeletedBySenderFalseOrReceiverAndSenderAndDeletedByReceiverFalseOrderBySentAtDesc(
user, selectedUser, user, selectedUser);

return messagesDTO;
return convertMessagesToDTO(messages);
}

// 서로 주고 받은 메세지 조회
// @Transactional
// public List<MessageDTO.Response> getBothMessages(String email, Long selectedUserId) {
// User user = userRepository.findByEmail(email)
// .orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND));
//
// User selectedUser = userRepository.findById(selectedUserId)
// .orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND));
//
// List<Message> messages = messageRepository.findBySenderAndReceiverAndDeletedBySenderFalseOrReceiverAndSenderAndDeletedByReceiverFalseOrderBySentAtDesc(
// user, selectedUser, user, selectedUser);
//
// return convertMessagesToDTO(messages);
// }

// 메세지함에서 사용자 별 가장 최근 메세지만 보내줌.
@Transactional
public Map<User, Message> getUserConversations(String email) {
User user = userRepository.findByEmail(email)
.orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND));

List<Message> userMessages = messageRepository.findBySenderOrReceiverOrderBySentAtDesc(user, user);
List<Message> userMessages = messageRepository.findBySenderAndDeletedBySenderFalseOrReceiverAndDeletedByReceiverFalseOrderBySentAtDesc(user, user);
Map<User, Message> conversations = new HashMap<>();

for (Message message : userMessages) {
Expand Down

0 comments on commit a782713

Please sign in to comment.