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