55 lines
1.7 KiB
Java
55 lines
1.7 KiB
Java
package com.yaoyuan.jiscuss.dto;
|
|
|
|
import com.yaoyuan.jiscuss.entity.User;
|
|
import org.mapstruct.Mapper;
|
|
import org.mapstruct.MappingConstants;
|
|
import org.mapstruct.ReportingPolicy;
|
|
|
|
/**
|
|
* MapStruct mapper between {@link User} entity and its DTOs.
|
|
*
|
|
* <p>The {@code password} field is intentionally never copied into a response and
|
|
* is left {@code null} when constructing a {@link User} from a create request —
|
|
* the caller (service layer) is responsible for BCrypt-hashing and setting it.
|
|
*/
|
|
@Mapper(
|
|
componentModel = MappingConstants.ComponentModel.SPRING,
|
|
unmappedTargetPolicy = ReportingPolicy.IGNORE
|
|
)
|
|
public interface UserMapper {
|
|
|
|
/** Map a {@link User} entity to a safe {@link UserResponse} (no password). */
|
|
default UserResponse toResponse(User user) {
|
|
if (user == null) {
|
|
return null;
|
|
}
|
|
return new UserResponse(
|
|
user.getId(),
|
|
user.getUsername(),
|
|
user.getRealname(),
|
|
user.getEmail(),
|
|
user.getAvatar(),
|
|
user.getGender(),
|
|
user.getPhone(),
|
|
user.getAge(),
|
|
user.getDiscussionsCount(),
|
|
user.getCommentsCount(),
|
|
user.getJoinTime(),
|
|
user.getLastSeenTime(),
|
|
user.getLevel()
|
|
);
|
|
}
|
|
|
|
/** Map a create request to a new {@link User} entity. Password must be set by the caller. */
|
|
default User fromCreateRequest(UserCreateRequest request) {
|
|
if (request == null) {
|
|
return null;
|
|
}
|
|
User user = new User();
|
|
user.setUsername(request.username());
|
|
user.setEmail(request.email());
|
|
user.setRealname(request.realname());
|
|
return user;
|
|
}
|
|
}
|