Files
AIGC/demo/src/main/java/com/example/demo/model/User.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;
}
}