From b701182f6b79517eaf754c17f18bc60ba23e1d9b Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Thu, 23 Jul 2026 13:20:59 +0800 Subject: [PATCH] =?UTF-8?q?fix(api):=20=E4=BF=AE=E5=A4=8D=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=A0=81repository=20datetime=E6=97=B6=E5=8C=BA?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20-=20=E6=95=B0=E6=8D=AE=E5=BA=93naive?= =?UTF-8?q?=E8=BD=ACaware?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SQLAlchemy 从数据库读出的 DateTime 是 naive(不带时区), 但领域模型 VerificationCode 用的是 aware datetime(带 timezone.utc), 直接比较会报 "can't compare offset-naive and offset-aware datetimes"。 修复:_to_entity 时给所有 datetime 字段补 timezone.utc。 影响:send-verification-code 限流检查、bind-contact 验证码校验(is_expired) --- .../verification_code_repository.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/adapters/sqlalchemy_impl/verification_code_repository.py b/packages/adapters/sqlalchemy_impl/verification_code_repository.py index 6c92fd821..ce2a383c0 100755 --- a/packages/adapters/sqlalchemy_impl/verification_code_repository.py +++ b/packages/adapters/sqlalchemy_impl/verification_code_repository.py @@ -67,13 +67,24 @@ class SQLAlchemyVerificationCodeRepository(VerificationCodeRepository): def _to_entity(model: VerificationCodeModel | None) -> VerificationCode | None: if model is None: return None + + # SQLAlchemy 从数据库读出的 DateTime 是 naive(不带时区), + # 领域模型期望 aware datetime(带 timezone.utc),直接用会报 + # "can't compare offset-naive and offset-aware datetimes" + def _ensure_aware(dt: datetime | None) -> datetime | None: + if dt is None: + return None + if dt.tzinfo is None: + return dt.replace(tzinfo=timezone.utc) + return dt + return VerificationCode( id=model.id, recipient=model.recipient, code=model.code, code_type=model.code_type, - expires_at=model.expires_at, - used_at=model.used_at, + expires_at=_ensure_aware(model.expires_at), + used_at=_ensure_aware(model.used_at), attempts=model.attempts, - created_at=model.created_at, + created_at=_ensure_aware(model.created_at), ) -- 2.54.0