45 lines
2.2 KiB
Python
45 lines
2.2 KiB
Python
from sqlalchemy import Column, DateTime, String, Integer
|
|
from sqlalchemy.sql import func
|
|
|
|
from .base import AutoID, Base
|
|
|
|
class User(Base, AutoID):
|
|
__tablename__ = "users"
|
|
|
|
# 自定义配置
|
|
# _id_prefix_len = 4
|
|
# _id_payload_len = 16
|
|
|
|
google_id = Column(String, unique=True, index=True)
|
|
email = Column(String, unique=True, index=True)
|
|
name = Column(String)
|
|
# 类似 Twitter 的 @code 唯一标识
|
|
handle = Column(String, unique=True, index=True, nullable=True)
|
|
avatar = Column(String)
|
|
|
|
# ---- 互动统计字段 ----
|
|
following_count = Column(Integer, default=0, nullable=False, server_default="0") # 关注了多少人
|
|
follower_count = Column(Integer, default=0, nullable=False, server_default="0") # 粉丝数
|
|
|
|
# 作为 Owner (所有者) 身份在各个空间获得的累计总数
|
|
owner_project_count = Column(Integer, default=0, nullable=False, server_default="0")
|
|
owner_likes_count = Column(Integer, default=0, nullable=False, server_default="0")
|
|
owner_favorites_count = Column(Integer, default=0, nullable=False, server_default="0")
|
|
owner_shares_count = Column(Integer, default=0, nullable=False, server_default="0")
|
|
|
|
# 作为 Admin (管理员) 身份在各个空间获得的累计总数
|
|
admin_project_count = Column(Integer, default=0, nullable=False, server_default="0")
|
|
admin_likes_count = Column(Integer, default=0, nullable=False, server_default="0")
|
|
admin_favorites_count = Column(Integer, default=0, nullable=False, server_default="0")
|
|
admin_shares_count = Column(Integer, default=0, nullable=False, server_default="0")
|
|
|
|
# 作为 User (普通用户) 身份在各个空间获得的累计总数
|
|
user_project_count = Column(Integer, default=0, nullable=False, server_default="0")
|
|
user_likes_count = Column(Integer, default=0, nullable=False, server_default="0")
|
|
user_favorites_count = Column(Integer, default=0, nullable=False, server_default="0")
|
|
user_shares_count = Column(Integer, default=0, nullable=False, server_default="0")
|
|
|
|
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
|
|
|
def __repr__(self):
|
|
return f"<User(id={self.id}, name={self.name}, email={self.email})>" |