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