82 lines
1.7 KiB
Java
82 lines
1.7 KiB
Java
package de.ph87.tools.user;
|
|
|
|
import de.ph87.tools.web.IWebSocketMessage;
|
|
import jakarta.persistence.Column;
|
|
import jakarta.persistence.Entity;
|
|
import jakarta.persistence.Id;
|
|
import jakarta.persistence.Table;
|
|
import lombok.*;
|
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
|
import java.time.ZonedDateTime;
|
|
import java.util.List;
|
|
import java.util.UUID;
|
|
|
|
@Entity
|
|
@Getter
|
|
@ToString
|
|
@NoArgsConstructor
|
|
@Table(name = "`user`")
|
|
public class User implements IWebSocketMessage {
|
|
|
|
@Id
|
|
@NonNull
|
|
@Column(nullable = false)
|
|
private String privateUuid = UUID.randomUUID().toString();
|
|
|
|
@NonNull
|
|
@Column(nullable = false)
|
|
private String publicUuid = UUID.randomUUID().toString();
|
|
|
|
@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
|
|
@Column(nullable = false)
|
|
private String password = "";
|
|
|
|
public User(@NonNull final String name) {
|
|
this.name = name;
|
|
}
|
|
|
|
public void touch() {
|
|
lastAccess = ZonedDateTime.now();
|
|
}
|
|
|
|
@Override
|
|
public List<Object> getWebsocketTopic() {
|
|
return List.of("User", privateUuid);
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(final Object obj) {
|
|
if (!(obj instanceof final User user)) {
|
|
return false;
|
|
}
|
|
return user.privateUuid.equals(this.privateUuid);
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return privateUuid.hashCode();
|
|
}
|
|
|
|
public void setPassword(@NonNull final PasswordEncoder passwordEncoder, @NonNull final String password) {
|
|
this.password = passwordEncoder.encode(password);
|
|
}
|
|
|
|
}
|