fix(api): 修复验证码repository datetime时区问题 - naive转aware #755

Merged
xiaoxia merged 1 commits from fix/verification-code-datetime-timezone into develop 2026-07-23 17:32:51 +08:00
Owner
No description provided.
xiaoxia added 1 commit 2026-07-23 13:21:27 +08:00
fix(api): 修复验证码repository datetime时区问题 - 数据库naive转aware
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 29s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 13s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 28s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m19s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m18s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m3s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 32s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m15s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m1s
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 3m44s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m41s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 3m15s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m33s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 9m23s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 35s
b701182f6b
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)
Collaborator

代码审查结果 - PR #755

⚠️ 问题(0个需要修改)

💡 建议(1个可选)

  1. verification_code_repository.py 第81行:时区假设风险
    • 代码使用 replace(tzinfo=timezone.utc) 强制将数据库读出的时间标记为 UTC。这假设数据库中存储的时间本身就是 UTC 时间(只是没带时区信息)。如果数据库实际存储的是本地服务器时间(如 CST),此操作会导致时间语义错误(时间值不变但时区标签变了,导致实际时间偏移)。
    • 建议:确认数据库字段配置及写入逻辑,确保存储的确实是 UTC 时间。如果数据库可能存储本地时间,应结合 astimezone 进行转换。

格式检查通过 | 逻辑审查通过 | 性能无明显问题


🤖 由 AI 代码审查机器人自动生成 | 2026-07-23 05:26:26 | 模型:

## 代码审查结果 - PR #755 ### ⚠️ 问题(0个需要修改) 无 ### 💡 建议(1个可选) 1. **verification_code_repository.py 第81行**:时区假设风险 - 代码使用 `replace(tzinfo=timezone.utc)` 强制将数据库读出的时间标记为 UTC。这假设数据库中存储的时间本身就是 UTC 时间(只是没带时区信息)。如果数据库实际存储的是本地服务器时间(如 CST),此操作会导致时间语义错误(时间值不变但时区标签变了,导致实际时间偏移)。 - 建议:确认数据库字段配置及写入逻辑,确保存储的确实是 UTC 时间。如果数据库可能存储本地时间,应结合 `astimezone` 进行转换。 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-23 05:26:26 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit b5ad67830e into develop 2026-07-23 17:32:51 +08:00
xiaoxia deleted branch fix/verification-code-datetime-timezone 2026-07-23 17:32:51 +08:00

🗑️ 预览环境已清理

PR #755 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #755 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.