You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

32 lines
1.3 KiB

package com.mydreamjob.messaging;
import com.mydreamjob.messaging.dto.MessageResponse;
import org.springframework.stereotype.Component;
import java.util.Objects;
/** 集中处理 DIRECT 与 TALENT_INVITATION 消息的白名单映射。 */
@Component
public class MessageViewMapper {
public static final String RECALLED_PLACEHOLDER = "消息已撤回";
public MessageResponse toResponse(Message message, Long currentUserId, boolean talentInvitation) {
if (message == null) return null;
boolean recalled = "RECALLED".equals(message.getStatus());
MessageResponse.MessageResponseBuilder builder = MessageResponse.builder()
.id(message.getId())
.conversationId(message.getConversationId())
.content(recalled ? RECALLED_PLACEHOLDER : message.getContent())
.status(message.getStatus() == null ? "SENT" : message.getStatus())
.recalledAt(message.getRecalledAt())
.createdAt(message.getCreatedAt());
if (talentInvitation) {
builder.senderScope(Objects.equals(message.getSenderUserId(), currentUserId)
? "CURRENT_USER" : "OTHER_PARTICIPANT");
} else {
builder.senderUserId(message.getSenderUserId());
}
return builder.build();
}
}