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