View Javadoc
1   package fr.tiogars.domaintemplate.domains.auth.user.entities;
2   
3   import java.time.Instant;
4   import java.util.LinkedHashSet;
5   import java.util.Set;
6   
7   import fr.tiogars.domaintemplate.domains.auth.role.entities.RoleEntity;
8   import jakarta.persistence.Column;
9   import jakarta.persistence.Entity;
10  import jakarta.persistence.FetchType;
11  import jakarta.persistence.GeneratedValue;
12  import jakarta.persistence.GenerationType;
13  import jakarta.persistence.Id;
14  import jakarta.persistence.JoinColumn;
15  import jakarta.persistence.JoinTable;
16  import jakarta.persistence.ManyToMany;
17  import jakarta.persistence.Table;
18  
19  /** Persists a user account and its password hash. */
20  @Entity
21  @Table(name = "auth_users")
22  public class UserEntity {
23  
24      @Id
25      @GeneratedValue(strategy = GenerationType.IDENTITY)
26      private Long id;
27  
28      @Column(nullable = false, unique = true)
29      private String username;
30  
31      @Column(nullable = false)
32      private String passwordHash;
33  
34      @Column(nullable = false)
35      private boolean enabled;
36  
37      @ManyToMany(fetch = FetchType.EAGER)
38      @JoinTable(
39              name = "auth_user_roles",
40              joinColumns = @JoinColumn(name = "user_id"),
41              inverseJoinColumns = @JoinColumn(name = "role_id"))
42      private Set<RoleEntity> roles = new LinkedHashSet<>();
43  
44      @Column(nullable = false, updatable = false)
45      private Instant createdDate;
46  
47      @Column(nullable = false)
48      private Instant lastModifiedDate;
49  
50      protected UserEntity() {
51          // required by JPA
52      }
53  
54      public UserEntity(
55              String username,
56              String passwordHash,
57              boolean enabled,
58              Set<RoleEntity> roles,
59              Instant createdDate,
60              Instant lastModifiedDate) {
61          this.username = username;
62          this.passwordHash = passwordHash;
63          this.enabled = enabled;
64          this.roles = new LinkedHashSet<>(roles);
65          this.createdDate = createdDate;
66          this.lastModifiedDate = lastModifiedDate;
67      }
68  
69      public void update(String username, String passwordHash, boolean enabled, Set<RoleEntity> roles, Instant lastModifiedDate) {
70          this.username = username;
71          if (passwordHash != null) {
72              this.passwordHash = passwordHash;
73          }
74          this.enabled = enabled;
75          this.roles = new LinkedHashSet<>(roles);
76          this.lastModifiedDate = lastModifiedDate;
77      }
78  
79      public Long getId() {
80          return id;
81      }
82  
83      public String getUsername() {
84          return username;
85      }
86  
87      public String getPasswordHash() {
88          return passwordHash;
89      }
90  
91      public boolean isEnabled() {
92          return enabled;
93      }
94  
95      public Set<RoleEntity> getRoles() {
96          return roles;
97      }
98  
99      public Instant getCreatedDate() {
100         return createdDate;
101     }
102 
103     public Instant getLastModifiedDate() {
104         return lastModifiedDate;
105     }
106 }