Tools/src/main/java/de/ph87/tools/user/User.java

86 lines
1.9 KiB
Java

package de.ph87.tools.user;
import de.ph87.tools.user.uuid.UserPrivateUuid;
import de.ph87.tools.user.uuid.UserPublicAbstract;
import de.ph87.tools.user.uuid.UserPublicUuid;
import jakarta.persistence.*;
import lombok.*;
import org.springframework.security.crypto.password.PasswordEncoder;
import java.time.ZonedDateTime;
import java.util.UUID;
@Entity
@Getter
@ToString
@NoArgsConstructor
@Table(name = "`user`")
public class User extends UserPublicAbstract {
@Id
@NonNull
@Getter(AccessLevel.NONE)
private String publicUuid = UUID.randomUUID().toString();
@Transient
private UserPublicUuid _publicUuid;
@NonNull
public UserPublicUuid getPublicUuid() {
if (_publicUuid == null) {
_publicUuid = new UserPublicUuid(publicUuid);
}
return _publicUuid;
}
@NonNull
@Getter(AccessLevel.NONE)
@Column(nullable = false, unique = true, updatable = false)
private String privateUuid = UUID.randomUUID().toString();
@Transient
private UserPrivateUuid _privateUuid;
@NonNull
public UserPrivateUuid getPrivateUuid() {
if (_privateUuid == null) {
_privateUuid = new UserPrivateUuid(privateUuid);
}
return _privateUuid;
}
@NonNull
@Column(nullable = false)
private ZonedDateTime created = ZonedDateTime.now();
@NonNull
@Column(nullable = false)
private ZonedDateTime lastAccess = created;
@Setter
@NonNull
@Column(nullable = false, unique = true)
private String name;
@Column(nullable = false)
private boolean admin = false;
@NonNull
@ToString.Exclude
@Column(nullable = false)
private String password = "";
public User(@NonNull final String name) {
this.name = name;
}
public void touch() {
lastAccess = ZonedDateTime.now();
}
public void setPassword(@NonNull final PasswordEncoder passwordEncoder, @NonNull final String password) {
this.password = passwordEncoder.encode(password);
}
}