View Javadoc
1   package io.extact.rms.application.domain;
2   
3   import static jakarta.persistence.AccessType.*;
4   
5   import jakarta.persistence.Access;
6   import jakarta.persistence.Entity;
7   import jakarta.persistence.EnumType;
8   import jakarta.persistence.Enumerated;
9   import jakarta.persistence.GeneratedValue;
10  import jakarta.persistence.GenerationType;
11  import jakarta.persistence.Id;
12  import jakarta.persistence.Transient;
13  
14  import org.apache.commons.lang3.builder.ToStringBuilder;
15  import org.apache.commons.lang3.builder.ToStringStyle;
16  
17  import lombok.AllArgsConstructor;
18  import lombok.Getter;
19  import lombok.NoArgsConstructor;
20  import lombok.Setter;
21  
22  import io.extact.rms.application.domain.constraint.Contact;
23  import io.extact.rms.application.domain.constraint.LoginId;
24  import io.extact.rms.application.domain.constraint.Passowrd;
25  import io.extact.rms.application.domain.constraint.PhoneNumber;
26  import io.extact.rms.application.domain.constraint.RmsId;
27  import io.extact.rms.application.domain.constraint.UserName;
28  import io.extact.rms.application.domain.constraint.UserTypeConstraint;
29  import io.extact.rms.application.domain.constraint.ValidationGroups.Update;
30  
31  @Access(FIELD)
32  @Entity
33  @Getter
34  @Setter
35  @NoArgsConstructor
36  @AllArgsConstructor(staticName = "of")
37  public class UserAccount implements Transformable, IdAccessable {
38  
39      /** UserType */
40      public enum UserType {
41  
42          ADMIN(true),
43          MEMBER(false);
44  
45          boolean admin;
46          private UserType(boolean admin) {
47              this.admin = admin;
48          }
49          public boolean isAdmin() {
50              return admin;
51          }
52      }
53  
54      /** id */
55      @Id
56      @GeneratedValue(strategy = GenerationType.IDENTITY)
57      @RmsId(groups = Update.class)
58      private Integer id;
59  
60      /** ログインID */
61      @LoginId
62      private String loginId;
63  
64      /** パスワード */
65      @Passowrd
66      private String password;
67  
68      /** ユーザ名 */
69      @UserName
70      private String userName;
71  
72      /** 電話番号 */
73      @PhoneNumber
74      private String phoneNumber;
75  
76      /** 連絡先 */
77      @Contact
78      private String contact;
79  
80      /** ユーザ区分 */
81      @Enumerated(EnumType.STRING)
82      @UserTypeConstraint
83      private UserType userType;
84  
85  
86      // ----------------------------------------------------- factory methods
87  
88      public static UserAccount ofTransient(String loginId, String password, String userName, String phoneNumber, String contact, UserType userType) {
89          return of(null, loginId, password, userName, phoneNumber, contact, userType);
90      }
91  
92      // ----------------------------------------------------- service methods
93  
94      @Transient
95      public boolean isAdmin() {
96          return this.userType == UserType.ADMIN;
97      }
98  
99      public void setAdmin(boolean isAdmin) {
100         this.userType = isAdmin ? UserType.ADMIN : UserType.MEMBER;
101     }
102 
103     // ----------------------------------------------------- override methods
104 
105     @Override
106     public String toString() {
107         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
108     }
109 }