230 lines
4.8 KiB
Java
230 lines
4.8 KiB
Java
package com.example.demo.model;
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
import jakarta.persistence.Column;
|
|
import jakarta.persistence.Entity;
|
|
import jakarta.persistence.GeneratedValue;
|
|
import jakarta.persistence.GenerationType;
|
|
import jakarta.persistence.Id;
|
|
import jakarta.persistence.PrePersist;
|
|
import jakarta.persistence.Table;
|
|
import jakarta.validation.constraints.Email;
|
|
import jakarta.validation.constraints.Min;
|
|
import jakarta.validation.constraints.NotBlank;
|
|
import jakarta.validation.constraints.Size;
|
|
|
|
@Entity
|
|
@Table(name = "users")
|
|
public class User {
|
|
|
|
@Id
|
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
private Long id;
|
|
|
|
@NotBlank
|
|
@Size(min = 3, max = 50)
|
|
@Column(nullable = false, unique = true, length = 50)
|
|
private String username;
|
|
|
|
@NotBlank
|
|
@Email
|
|
@Column(nullable = false, unique = true, length = 100)
|
|
private String email;
|
|
|
|
@Column(nullable = true)
|
|
private String passwordHash;
|
|
|
|
@NotBlank
|
|
@Column(nullable = false, length = 30)
|
|
private String role = "ROLE_USER";
|
|
|
|
@Min(0)
|
|
@Column(nullable = false)
|
|
private Integer points = 50; // 默认50积分
|
|
|
|
@Min(0)
|
|
@Column(nullable = false)
|
|
private Integer frozenPoints = 0; // 冻结积分
|
|
|
|
@Column(name = "phone", length = 20)
|
|
private String phone;
|
|
|
|
@Column(name = "avatar", length = 500)
|
|
private String avatar;
|
|
|
|
@Column(name = "nickname", length = 100)
|
|
private String nickname;
|
|
|
|
@Column(name = "gender", length = 10)
|
|
private String gender;
|
|
|
|
@Column(name = "birthday")
|
|
private java.time.LocalDate birthday;
|
|
|
|
@Column(name = "address", columnDefinition = "TEXT")
|
|
private String address;
|
|
|
|
@Column(name = "is_active", nullable = false)
|
|
private Boolean isActive = true;
|
|
|
|
@Column(name = "last_login_at")
|
|
private LocalDateTime lastLoginAt;
|
|
|
|
@Column(name = "created_at", nullable = false)
|
|
private LocalDateTime createdAt;
|
|
|
|
@Column(name = "updated_at")
|
|
private LocalDateTime updatedAt;
|
|
|
|
@PrePersist
|
|
protected void onCreate() {
|
|
createdAt = LocalDateTime.now();
|
|
}
|
|
|
|
public Long getId() {
|
|
return id;
|
|
}
|
|
|
|
public void setId(Long id) {
|
|
this.id = id;
|
|
}
|
|
|
|
public String getUsername() {
|
|
return username;
|
|
}
|
|
|
|
public void setUsername(String username) {
|
|
this.username = username;
|
|
}
|
|
|
|
public String getEmail() {
|
|
return email;
|
|
}
|
|
|
|
public void setEmail(String email) {
|
|
this.email = email;
|
|
}
|
|
|
|
public String getPasswordHash() {
|
|
return passwordHash;
|
|
}
|
|
|
|
public void setPasswordHash(String passwordHash) {
|
|
this.passwordHash = passwordHash;
|
|
}
|
|
|
|
public String getRole() {
|
|
return role;
|
|
}
|
|
|
|
public void setRole(String role) {
|
|
this.role = role;
|
|
}
|
|
|
|
public Integer getPoints() {
|
|
return points;
|
|
}
|
|
|
|
public void setPoints(Integer points) {
|
|
this.points = points;
|
|
}
|
|
|
|
public Integer getFrozenPoints() {
|
|
return frozenPoints;
|
|
}
|
|
|
|
public void setFrozenPoints(Integer frozenPoints) {
|
|
this.frozenPoints = frozenPoints;
|
|
}
|
|
|
|
/**
|
|
* 获取可用积分(总积分 - 冻结积分)
|
|
*/
|
|
public Integer getAvailablePoints() {
|
|
return Math.max(0, points - frozenPoints);
|
|
}
|
|
|
|
public LocalDateTime getCreatedAt() {
|
|
return createdAt;
|
|
}
|
|
|
|
public void setCreatedAt(LocalDateTime createdAt) {
|
|
this.createdAt = createdAt;
|
|
}
|
|
|
|
public String getPhone() {
|
|
return phone;
|
|
}
|
|
|
|
public void setPhone(String phone) {
|
|
this.phone = phone;
|
|
}
|
|
|
|
public String getAvatar() {
|
|
return avatar;
|
|
}
|
|
|
|
public void setAvatar(String avatar) {
|
|
this.avatar = avatar;
|
|
}
|
|
|
|
public String getNickname() {
|
|
return nickname;
|
|
}
|
|
|
|
public void setNickname(String nickname) {
|
|
this.nickname = nickname;
|
|
}
|
|
|
|
public String getGender() {
|
|
return gender;
|
|
}
|
|
|
|
public void setGender(String gender) {
|
|
this.gender = gender;
|
|
}
|
|
|
|
public java.time.LocalDate getBirthday() {
|
|
return birthday;
|
|
}
|
|
|
|
public void setBirthday(java.time.LocalDate birthday) {
|
|
this.birthday = birthday;
|
|
}
|
|
|
|
public String getAddress() {
|
|
return address;
|
|
}
|
|
|
|
public void setAddress(String address) {
|
|
this.address = address;
|
|
}
|
|
|
|
public Boolean getIsActive() {
|
|
return isActive;
|
|
}
|
|
|
|
public void setIsActive(Boolean isActive) {
|
|
this.isActive = isActive;
|
|
}
|
|
|
|
public LocalDateTime getLastLoginAt() {
|
|
return lastLoginAt;
|
|
}
|
|
|
|
public void setLastLoginAt(LocalDateTime lastLoginAt) {
|
|
this.lastLoginAt = lastLoginAt;
|
|
}
|
|
|
|
public LocalDateTime getUpdatedAt() {
|
|
return updatedAt;
|
|
}
|
|
|
|
public void setUpdatedAt(LocalDateTime updatedAt) {
|
|
this.updatedAt = updatedAt;
|
|
}
|
|
}
|
|
|
|
|