89 lines
2.1 KiB
Python
89 lines
2.1 KiB
Python
"""
|
|
Auth 모듈 SQLAlchemy 모델 정의
|
|
|
|
카카오 로그인 사용자 정보를 저장합니다.
|
|
"""
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import DateTime, Index, Integer, String, func
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from app.database.session import Base
|
|
|
|
|
|
class User(Base):
|
|
"""
|
|
사용자 테이블 (카카오 로그인)
|
|
|
|
Attributes:
|
|
id: 고유 식별자 (자동 증가)
|
|
kakao_id: 카카오 고유 ID
|
|
nickname: 카카오 닉네임
|
|
email: 카카오 이메일 (선택)
|
|
profile_image: 프로필 이미지 URL
|
|
created_at: 가입 일시
|
|
last_login_at: 마지막 로그인 일시
|
|
"""
|
|
|
|
__tablename__ = "user"
|
|
__table_args__ = (
|
|
Index("idx_user_kakao_id", "kakao_id"),
|
|
{
|
|
"mysql_engine": "InnoDB",
|
|
"mysql_charset": "utf8mb4",
|
|
"mysql_collate": "utf8mb4_unicode_ci",
|
|
},
|
|
)
|
|
|
|
id: Mapped[int] = mapped_column(
|
|
Integer,
|
|
primary_key=True,
|
|
nullable=False,
|
|
autoincrement=True,
|
|
comment="고유 식별자",
|
|
)
|
|
|
|
kakao_id: Mapped[str] = mapped_column(
|
|
String(50),
|
|
nullable=False,
|
|
unique=True,
|
|
comment="카카오 고유 ID",
|
|
)
|
|
|
|
nickname: Mapped[str | None] = mapped_column(
|
|
String(100),
|
|
nullable=True,
|
|
comment="카카오 닉네임",
|
|
)
|
|
|
|
email: Mapped[str | None] = mapped_column(
|
|
String(255),
|
|
nullable=True,
|
|
comment="카카오 이메일",
|
|
)
|
|
|
|
profile_image: Mapped[str | None] = mapped_column(
|
|
String(500),
|
|
nullable=True,
|
|
comment="프로필 이미지 URL",
|
|
)
|
|
|
|
created_at: Mapped[datetime] = mapped_column(
|
|
DateTime,
|
|
nullable=False,
|
|
server_default=func.now(),
|
|
comment="가입 일시",
|
|
)
|
|
|
|
last_login_at: Mapped[datetime] = mapped_column(
|
|
DateTime,
|
|
nullable=False,
|
|
server_default=func.now(),
|
|
onupdate=func.now(),
|
|
comment="마지막 로그인 일시",
|
|
)
|
|
|
|
def __repr__(self) -> str:
|
|
return f"<User(id={self.id}, kakao_id='{self.kakao_id}', nickname='{self.nickname}')>"
|