diff --git a/app/models.py b/app/models.py index e76aa32..c21c43f 100644 --- a/app/models.py +++ b/app/models.py @@ -17,12 +17,14 @@ class User(Base): username = Column(String(64), unique=True, nullable=False, index=True) password_hash = Column(String(128), nullable=False) is_admin = Column(Boolean, nullable=False, default=False) + invited_by_code_id = Column(Integer, ForeignKey("invite_codes.id", ondelete="SET NULL"), nullable=True) showcase_mode = Column(String(16), nullable=False, default="profile") created_at = Column(DateTime, default=_utcnow) profiles = relationship("Profile", back_populates="user", cascade="all, delete-orphan") sessions = relationship("UserSession", back_populates="user", cascade="all, delete-orphan") invite_codes = relationship("InviteCode", back_populates="creator", cascade="all, delete-orphan") + invited_by_code = relationship("InviteCode", foreign_keys=[invited_by_code_id]) class InviteCode(Base): @@ -37,6 +39,7 @@ class InviteCode(Base): created_at = Column(DateTime, default=_utcnow) creator = relationship("User", back_populates="invite_codes") + registered_users = relationship("User", back_populates="invited_by_code", foreign_keys="User.invited_by_code_id") class UserSession(Base): diff --git a/app/routers/web.py b/app/routers/web.py index bb5a5fc..2f6b059 100644 --- a/app/routers/web.py +++ b/app/routers/web.py @@ -153,7 +153,7 @@ def register_submit( "register.html", {"request": request, "error": "用户名已存在"}, status_code=400 ) # Create user - new_user = User(username=username, password_hash=hash_password(password)) + new_user = User(username=username, password_hash=hash_password(password), invited_by_code_id=code_obj.id) db.add(new_user) db.flush() # Update invite code usage diff --git a/app/templates/admin_invites.html b/app/templates/admin_invites.html index 0d6cd55..6a06661 100644 --- a/app/templates/admin_invites.html +++ b/app/templates/admin_invites.html @@ -61,6 +61,9 @@ {% else %} 永不过期 {% endif %} + {% if c.registered_users %} + 注册用户: {{ c.registered_users|map(attribute='username')|join(', ') }} + {% endif %}