@Configuration
@Getter
public class AuthConfig {
private final Integer maxLoginFailCount;
public AuthConfig(@Value("${auth.max-login-fail-count}") Integer maxLoginFailCount) {
this.maxLoginFailCount = maxLoginFailCount;
}
}
@Builder
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "user")
@Entity
@EntityListeners(AuditingEntityListener.class)
public class UserEntity {
@Id
@Size(max = 255)
@Column(name = "user_id")
private String userId;
@NotBlank
@Size(max = 255)
@Column(name = "user_name")
private String userName;
@Size(max = 255)
@Column(name = "user_password")
private String userPassword;
@NotBlank
@Size(max = 255)
@Column(name = "user_email")
private String userEmail;
@NotNull
@Enumerated(EnumType.STRING)
@Column(name = "user_level")
private User.UserLevel userLevel = User.UserLevel.USER;
@NotNull
@Enumerated(EnumType.STRING)
@Column(name = "active_yn")
private User.UserActiveYn activeYn = User.UserActiveYn.Y;
@NotNull
@Column(name = "login_fail_count")
private Integer loginFailCount = 0;
@Column(name = "user_birth")
private LocalDate userBirth;
@NotNull
@Enumerated(EnumType.STRING)
@Column(name = "auth_type")
private User.UserAuthType authType = User.UserAuthType.N;
@Enumerated(EnumType.STRING)
@Column(name = "social_provider")
private User.UserSocialProvider socialProvider;
@Size(max = 255)
@Column(name = "social_id")
private String socialId;
@Column(name = "created_at")
@CreatedDate
private LocalDateTime createdAt;
@Column(name = "updated_at")
@LastModifiedDate
private LocalDateTime updatedAt;
// 로그인 실패 기록 초기화
public UserEntity clearFailedLogin() {
this.loginFailCount = 0;
return this;
}
// 로그인 실패 기록 증가. 최대 실패 횟수 이상 실패 시, 사용자 비활성화
public UserEntity increaseFailedLogin(Integer maxFailedLoginCount) {
this.loginFailCount = this.loginFailCount + 1;
if (loginFailCount >= maxFailedLoginCount) {
this.activeYn = User.UserActiveYn.N;
}
return this;
}
}