package com.openisle.model; import jakarta.persistence.*; import java.time.LocalDateTime; import java.util.EnumSet; import java.util.HashSet; import java.util.Set; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.hibernate.annotations.CreationTimestamp; /** * Simple user entity with basic fields and a role. */ @Entity @Getter @Setter @NoArgsConstructor @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String username; @Column(nullable = false, unique = true) private String email; @Column(nullable = false) private String password; @Column(nullable = false) private boolean verified = false; private String verificationCode; private String passwordResetCode; private String avatar; @Column(nullable = false) private int experience = 0; @Column(nullable = false) private int point = 0; @Column(length = 1000) private String introduction; @Column(length = 1000) private String registerReason; @Column(nullable = false) private boolean approved = true; @Enumerated(EnumType.STRING) @Column(nullable = false) private Role role = Role.USER; @Column(name = "is_bot", nullable = false) private boolean bot = false; @Enumerated(EnumType.STRING) private MedalType displayMedal; @ElementCollection(targetClass = NotificationType.class) @CollectionTable( name = "user_disabled_notification_types", joinColumns = @JoinColumn(name = "user_id") ) @Column(name = "notification_type") @Enumerated(EnumType.STRING) private Set disabledNotificationTypes = EnumSet.of( NotificationType.POST_VIEWED, NotificationType.USER_ACTIVITY ); @ElementCollection(targetClass = NotificationType.class) @CollectionTable( name = "user_disabled_email_notification_types", joinColumns = @JoinColumn(name = "user_id") ) @Column(name = "notification_type") @Enumerated(EnumType.STRING) private Set disabledEmailNotificationTypes = EnumSet.noneOf( NotificationType.class ); @CreationTimestamp @Column( nullable = false, updatable = false, columnDefinition = "DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6)" ) private LocalDateTime createdAt; }