Files
chat/backend/app/models/user.py
T
2026-06-12 23:14:12 +08:00

39 lines
2.0 KiB
Python

"""用户模型"""
from datetime import datetime, timezone
from sqlalchemy import String, Boolean, DateTime, Text
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.database import Base
class User(Base):
__tablename__ = "users"
id: Mapped[str] = mapped_column(String(36), primary_key=True)
username: Mapped[str] = mapped_column(String(50), unique=True, nullable=False, index=True)
email: Mapped[str] = mapped_column(String(255), unique=True, nullable=False, index=True)
password_hash: Mapped[str] = mapped_column(String(255), nullable=False)
avatar_url: Mapped[str | None] = mapped_column(String(500), nullable=True)
bio: Mapped[str | None] = mapped_column(String(200), nullable=True)
status: Mapped[str] = mapped_column(String(20), default="offline") # online/offline/away
is_admin: Mapped[bool] = mapped_column(Boolean, default=False)
is_banned: Mapped[bool] = mapped_column(Boolean, default=False)
banned_reason: Mapped[str | None] = mapped_column(String(500), nullable=True)
last_seen_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True)
created_at: Mapped[datetime] = mapped_column(DateTime, default=lambda: datetime.utcnow())
updated_at: Mapped[datetime] = mapped_column(
DateTime,
default=lambda: datetime.utcnow(),
onupdate=lambda: datetime.utcnow(),
)
# 关系
sent_messages = relationship("Message", back_populates="sender", foreign_keys="Message.sender_id")
conversations = relationship("ConversationMember", back_populates="user")
friends = relationship("Friend", foreign_keys="Friend.user_id", back_populates="user")
friend_of = relationship("Friend", foreign_keys="Friend.friend_user_id", back_populates="friend_user")
sent_requests = relationship("FriendRequest", foreign_keys="FriendRequest.from_user_id", back_populates="from_user")
received_requests = relationship("FriendRequest", foreign_keys="FriendRequest.to_user_id", back_populates="to_user")