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(); } }