UserAccount.java
package io.extact.rms.application.domain;
import static jakarta.persistence.AccessType.*;
import jakarta.persistence.Access;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Transient;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import io.extact.rms.application.domain.constraint.Contact;
import io.extact.rms.application.domain.constraint.LoginId;
import io.extact.rms.application.domain.constraint.Passowrd;
import io.extact.rms.application.domain.constraint.PhoneNumber;
import io.extact.rms.application.domain.constraint.RmsId;
import io.extact.rms.application.domain.constraint.UserName;
import io.extact.rms.application.domain.constraint.UserTypeConstraint;
import io.extact.rms.application.domain.constraint.ValidationGroups.Update;
@Access(FIELD)
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor(staticName = "of")
public class UserAccount implements Transformable, IdAccessable {
/** UserType */
public enum UserType {
ADMIN(true),
MEMBER(false);
boolean admin;
private UserType(boolean admin) {
this.admin = admin;
}
public boolean isAdmin() {
return admin;
}
}
/** id */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@RmsId(groups = Update.class)
private Integer id;
/** ログインID */
@LoginId
private String loginId;
/** パスワード */
@Passowrd
private String password;
/** ユーザ名 */
@UserName
private String userName;
/** 電話番号 */
@PhoneNumber
private String phoneNumber;
/** 連絡先 */
@Contact
private String contact;
/** ユーザ区分 */
@Enumerated(EnumType.STRING)
@UserTypeConstraint
private UserType userType;
// ----------------------------------------------------- factory methods
public static UserAccount ofTransient(String loginId, String password, String userName, String phoneNumber, String contact, UserType userType) {
return of(null, loginId, password, userName, phoneNumber, contact, userType);
}
// ----------------------------------------------------- service methods
@Transient
public boolean isAdmin() {
return this.userType == UserType.ADMIN;
}
public void setAdmin(boolean isAdmin) {
this.userType = isAdmin ? UserType.ADMIN : UserType.MEMBER;
}
// ----------------------------------------------------- override methods
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}