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 @@ -15,6 +15,7 @@ public static GetAlarmDto.Response convertToResponse(Page<Alarm> alarmPage) {
.builder()
.alarmDetailList(alarmList)
.listSize(alarmList.size())
.currentPage(alarmPage.getNumber())
.isLast(alarmPage.isLast())
.totalPage(alarmPage.getTotalPages())
.totalElements(alarmPage.getTotalElements())
Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/brainpix/alarm/dto/GetAlarmDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class GetAlarmDto {
@Builder
public static class Response {
private Integer totalPage;
private Integer currentPage;
private Long totalElements;
private Integer listSize;
private Boolean isLast;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.brainpix.security.authorization.UserId;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;

Expand All @@ -37,7 +38,8 @@ public class MessageController {
@AllUser
@GetMapping
@Operation(summary = "메시지 다건 조회 API", description = "여러개의 메시지를 조회합니다.")
public ResponseEntity<ApiResponse<GetMessageListDto.Response>> getMessageList(@RequestParam String status,
public ResponseEntity<ApiResponse<GetMessageListDto.Response>> getMessageList(
@Parameter(description = "메시지 검색 조건 : ALL, SEND, RECEIVED") @RequestParam String status,
Pageable pageable, @UserId Long userId) {

GetMessageListDto.Parameter parameter = GetMessageListConverter.toParameter(userId, status, pageable);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ public static GetMessageListDto.Parameter toParameter(Long userId, String search
.build();
}

public static GetMessageListDto.Response toResponse(Page<Message> messages, Map<Long, String> senderMap) {
public static GetMessageListDto.Response toResponse(Page<Message> messages, Map<Long, String> userIdToNameMap) {
List<Message> messageList = messages.getContent();
List<GetMessageListDto.MessageDetail> messageDetailList = messageList.stream()
.map(message -> toMessageDetail(message, senderMap.get(message.getSenderId())))
.map(message -> toMessageDetail(message, userIdToNameMap))
.toList();

return GetMessageListDto.Response.builder()
Expand All @@ -39,12 +39,14 @@ public static GetMessageListDto.Response toResponse(Page<Message> messages, Map<
.build();
}

public static GetMessageListDto.MessageDetail toMessageDetail(Message message, String senderName){
public static GetMessageListDto.MessageDetail toMessageDetail(Message message, Map<Long, String> userIdToNameMap){
return GetMessageListDto.MessageDetail.builder()
.messageId(message.getId())
.title(message.getTitle())
.senderNickname(senderName)
.senderNickname(userIdToNameMap.get(message.getSenderId()))
.receiverNickname(userIdToNameMap.get(message.getReceiverId()))
.sendDate(message.getCreatedAt().toLocalDate())
.isRead(message.getIsRead())
.build();
}
}
2 changes: 2 additions & 0 deletions src/main/java/com/brainpix/message/dto/GetMessageListDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ public static class MessageDetail {
private String messageId;
private String title;
private String senderNickname;
private String receiverNickname;
private LocalDate sendDate;
private Boolean isRead;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package com.brainpix.message.dto;

public enum MessageSearchType {
ALL, READ, UNREAD
ALL, SEND, RECEIVED
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@
public interface MessageRepository extends MongoRepository<Message, String> {
Page<Message> findAllByReceiverId(Long receiverId, Pageable pageable);
Page<Message> findAllByReceiverIdAndIsRead(Long receiverId, Boolean isRead, Pageable pageable);
Page<Message> findAllBySenderId(Long senderId, Pageable pageable);
Long countAllByReceiverIdAndIsRead(Long receiverId, Boolean isRead);
}
18 changes: 12 additions & 6 deletions src/main/java/com/brainpix/message/service/MessageService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
Expand Down Expand Up @@ -61,13 +62,18 @@ public GetMessageListDto.Response getMessageList(GetMessageListDto.Parameter par
Page<Message> messages = getMessageListBySearchType(parameter.getUserId(), parameter.getSearchType(),
pageRequest);

// 수신자와 송신자의 id를 모두 가져옴
Set<Long> senderIdSet = messages.stream().map(Message::getSenderId).collect(Collectors.toSet());
Set<Long> receiverIdSet = messages.stream().map(Message::getReceiverId).collect(Collectors.toSet());
Set<Long> senderAndReceiverIdSet = Stream.concat(senderIdSet.stream(), receiverIdSet.stream())
.collect(Collectors.toSet());

Map<Long, String> senderMap = userRepository.findAllByIdIn(senderIdSet)
// in 쿼리로 한번에 가져온 후 Map 으로 변환
Map<Long, String> userIdAndNickNameMap = userRepository.findAllByIdIn(senderAndReceiverIdSet)
.stream()
.collect(Collectors.toMap(User::getId, User::getNickName));

return GetMessageListConverter.toResponse(messages, senderMap);
return GetMessageListConverter.toResponse(messages, userIdAndNickNameMap);
}

@Transactional(readOnly = true)
Expand Down Expand Up @@ -117,10 +123,10 @@ private Page<Message> getMessageListBySearchType(Long userId, MessageSearchType
PageRequest pageRequest) {
if (searchType == MessageSearchType.ALL) {
return messageRepository.findAllByReceiverId(userId, pageRequest);
} else if (searchType == MessageSearchType.READ) {
return messageRepository.findAllByReceiverIdAndIsRead(userId, true, pageRequest);
} else if (searchType == MessageSearchType.UNREAD) {
return messageRepository.findAllByReceiverIdAndIsRead(userId, false, pageRequest);
} else if (searchType == MessageSearchType.SEND) {
return messageRepository.findAllBySenderId(userId, pageRequest);
} else if (searchType == MessageSearchType.RECEIVED) {
return messageRepository.findAllByReceiverId(userId, pageRequest);
} else {
return Page.empty();
}
Expand Down