package com.zioinfo.signage.auth; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import java.time.LocalDateTime; @Data public class SignageUser { private Long id; private String tenantCode; private String username; @JsonIgnore private String passwordHash; // API 응답 미노출 private String role; // ADMIN, MANAGER, USER private String email; private String phone; private boolean active; // ── 로그인 보조 이식 컬럼 (signage_user ALTER, db/93_signage_login_helper.sql) ───────── /** 이름(아이디찾기/비번초기화 매칭 키). */ private String name; /** 가입 승인 상태(APPROVED / PENDING). 신규 가입은 PENDING(승인대기). */ private String approvalStatus; private LocalDateTime lastLoginAt; private LocalDateTime createdAt; // ── UIWS 2FA 이식 컬럼 (signage_user ALTER, db/91_uiws_port.sql) ───────────────── /** 이메일 인증코드(6자리). 발급 후 verify 단계에서 검증. API 응답에는 절대 미포함. */ @JsonIgnore private String emailVerifyCode; /** 인증코드 만료시각. */ @JsonIgnore private LocalDateTime emailVerifyExpire; /** 로그인 실패 누적 횟수(기본 0). max-login-fail 도달 시 locked. */ private Integer loginFailCount; /** 계정 잠금 여부(기본 false). */ private Boolean locked; /** TOTP 시크릿(UIWS OTP 경로 대비, 현재 이메일 흐름에서는 미사용). */ @JsonIgnore private String otpSecret; }