首个可运行的版本
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
"""用户模型"""
|
||||
|
||||
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")
|
||||
Reference in New Issue
Block a user