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