From 4104401759a0ae830cee8cb16ad5a36f0389405a Mon Sep 17 00:00:00 2001 From: Xiaoxia Agent Date: Sat, 3 Oct 2026 20:53:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20User=E5=AE=9E=E4=BD=93=E8=A1=A5?= =?UTF-8?q?=E4=BC=9A=E5=91=98=E5=AD=97=E6=AE=B5=E5=B9=B6=E6=98=A0=E5=B0=84?= =?UTF-8?q?=20users=20=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User domain 实体新增 is_member / member_type / member_expires_at, SQLAlchemy 仓储 save/_to_entity 同步映射,修复 /points/balance 始终返回 is_member=false 的问题。 --- packages/adapters/sqlalchemy_impl/user_repository.py | 6 ++++++ packages/domain/entities.py | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/packages/adapters/sqlalchemy_impl/user_repository.py b/packages/adapters/sqlalchemy_impl/user_repository.py index 4bafb2b60..594ce45d9 100755 --- a/packages/adapters/sqlalchemy_impl/user_repository.py +++ b/packages/adapters/sqlalchemy_impl/user_repository.py @@ -39,6 +39,9 @@ class SQLAlchemyUserRepository(UserRepository): model.phone_verified = user.phone_verified model.binding_completed_at = user.binding_completed_at model.profile_completed = user.profile_completed + model.is_member = user.is_member + model.member_type = user.member_type + model.member_expires_at = user.member_expires_at model.created_at = user.created_at self.session.commit() @@ -115,5 +118,8 @@ class SQLAlchemyUserRepository(UserRepository): phone_verified=model.phone_verified or False, binding_completed_at=model.binding_completed_at, profile_completed=model.profile_completed if model.profile_completed is not None else True, + is_member=model.is_member if model.is_member is not None else False, + member_type=model.member_type, + member_expires_at=model.member_expires_at, created_at=model.created_at, ) diff --git a/packages/domain/entities.py b/packages/domain/entities.py index 2c5c8a002..ea10ecbb4 100755 --- a/packages/domain/entities.py +++ b/packages/domain/entities.py @@ -60,6 +60,11 @@ class User: # 资料是否已完善(微信新用户首次设置昵称后置 True;邮箱注册默认 True) profile_completed: bool = True + # 会员字段 (#1895):与 users 表列对应 + is_member: bool = False + member_type: str | None = None + member_expires_at: datetime | None = None + created_at: datetime = field(default_factory=lambda: datetime.now(UTC))