package com.tourguide.modules.user.dto; import com.tourguide.modules.user.entity.MiniUser; import org.springframework.util.StringUtils; import java.time.LocalDateTime; /** 小程序用户的脱敏返回对象,不暴露密码与敏感平台凭据。 */ public class MiniUserResponse { private final Long id; private final String username; private final String nickname; private final String mobile; private final String avatar; private final String realName; private final String idCardNoMasked; private final boolean realNameVerified; private final Integer status; private final LocalDateTime createdAt; private final long orderCount; private MiniUserResponse(MiniUser user, long orderCount) { this.id = user.getId(); this.username = user.getUsername(); this.nickname = user.getNickname(); this.mobile = user.getMobile(); this.avatar = user.getAvatar(); this.realName = user.getRealName(); this.idCardNoMasked = maskIdCardNo(user.getIdCardNo()); this.realNameVerified = StringUtils.hasText(user.getRealName()) && StringUtils.hasText(user.getIdCardNo()); this.status = user.getStatus(); this.createdAt = user.getCreatedAt(); this.orderCount = orderCount; } public static MiniUserResponse from(MiniUser user) { return from(user, 0L); } public static MiniUserResponse from(MiniUser user, long orderCount) { return new MiniUserResponse(user, orderCount); } public Long getId() { return id; } public String getUsername() { return username; } public String getNickname() { return nickname; } public String getMobile() { return mobile; } public String getAvatar() { return avatar; } public String getRealName() { return realName; } public String getIdCardNoMasked() { return idCardNoMasked; } public boolean isRealNameVerified() { return realNameVerified; } public Integer getStatus() { return status; } public LocalDateTime getCreatedAt() { return createdAt; } public long getOrderCount() { return orderCount; } private static String maskIdCardNo(String idCardNo) { if (!StringUtils.hasText(idCardNo) || idCardNo.length() != 18) { return ""; } return idCardNo.substring(0, 6) + "********" + idCardNo.substring(14); } }