[FEAT] (사용자 로직): 인증 서비스 로직 구현 중
v0.1.1 (2025-11-13) - 사용자 관련 인증 서비스 로직 구현 중
This commit is contained in:
70
src/models/user_model/users.py
Normal file
70
src/models/user_model/users.py
Normal file
@@ -0,0 +1,70 @@
|
||||
"""
|
||||
사용자 모델
|
||||
"""
|
||||
|
||||
import uuid
|
||||
from typing import Dict, Any
|
||||
from extensions import db
|
||||
from utils.func import get_timestamp_ms
|
||||
import constants
|
||||
|
||||
class Users(db.Model):
|
||||
"""사용자 모델"""
|
||||
|
||||
__tablename__ = "users"
|
||||
|
||||
# 기본 필드
|
||||
user_uuid = db.Column(db.String(255), primary_key=True, nullable=False, comment="유저 UUID")
|
||||
id = db.Column(db.String(255), unique=True, nullable=False, index=True, comment="유저 ID")
|
||||
user_name = db.Column(db.String(50), nullable=True, comment="유저명")
|
||||
password = db.Column(db.String(255), nullable=False, comment="비밀번호")
|
||||
auth_level = db.Column(db.String(255), nullable=True, default=constants.AUTH_LEVEL_USER, comment="권한 레벨 (10: 관리자, 20: 사용자)")
|
||||
count = db.Column(db.SmallInteger, default=0, nullable=True, comment="로그인 싫패 횟수")
|
||||
|
||||
# 타임스탬프 (BIGINT - Unix Timestamp in milliseconds)
|
||||
created_at = db.Column(db.BigInteger, nullable=True, comment="생성일 (unix timestamp, ms)")
|
||||
updated_at = db.Column(db.BigInteger, nullable=True, comment="수정일 (unix timestamp, ms)")
|
||||
|
||||
def __init__(self, id: str, password_hash: str, **kwargs: Any) -> None:
|
||||
"""사용자 초기화"""
|
||||
self.user_uuid = str(uuid.uuid4())
|
||||
self.id = id
|
||||
self.password = password_hash
|
||||
|
||||
# 선택적 필드
|
||||
self.user_name = kwargs.get('user_name')
|
||||
|
||||
# 타임스탬프
|
||||
current_time = int(get_timestamp_ms())
|
||||
self.created_at = current_time
|
||||
self.updated_at = current_time
|
||||
|
||||
def increment_failed_login(self) -> None:
|
||||
"""로그인 실패 횟수 증가"""
|
||||
self.count = (self.count or 0) + 1
|
||||
self.updated_at = int(get_timestamp_ms())
|
||||
|
||||
def reset_failed_login(self) -> None:
|
||||
"""로그인 실패 횟수 초기화"""
|
||||
self.count = 0
|
||||
self.updated_at = int(get_timestamp_ms())
|
||||
|
||||
def update_timestamp(self) -> None:
|
||||
"""타임스탬프 업데이트"""
|
||||
self.updated_at = int(get_timestamp_ms())
|
||||
|
||||
def to_dict(self) -> Dict[str, Any]:
|
||||
"""딕셔너리로 변환"""
|
||||
return {
|
||||
'user_uuid': self.user_uuid,
|
||||
'id': self.id,
|
||||
'user_name': self.user_name,
|
||||
'auth_level': self.auth_level,
|
||||
'count': self.count,
|
||||
'created_at': self.created_at,
|
||||
'updated_at': self.updated_at
|
||||
}
|
||||
|
||||
def __repr__(self) -> str:
|
||||
"""디버깅, 로깅용"""
|
||||
return f"<User {self.id}>"
|
||||
Reference in New Issue
Block a user