feat(#1718): PATCH /auth/me 资料更新接口 + profile_completed 字段 #1728
Reference in New Issue
Block a user
Delete Branch "feature/patch-me-profile-1718"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
微信新用户昵称引导页(WechatOnboarding.tsx)点"进入小虾智剪"调 PATCH /api/v1/auth/me 返回 405;后端只有 GET /me 没有更新接口,个人设置页改昵称也走同一接口同样损坏。
改动
PATCH /auth/me(仅接受 display_name),strip + 1-20 字符校验,空白/超长 422,前端 UpdateProfileResponse 期望的{user: {...}}结构users.profile_completed字段(迁移 068):WechatSyncUseCase._create_wechat_user内置 False,首次进入 WechatOnboarding 完成设置后置 True/auth/wechat/bind与/auth/wechat/unbind的 user 字段也同步带 profile_completed测试
兼容
🚀 预览环境已部署
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
from __future__导入位置错误from __future__ import annotations语句必须物理上位于模块的最开始,在任何其他代码(包括模块文档字符串""")之前。当前代码将其插在文档字符串之后,这会导致该指令被 Python 解析器忽略,无法实现“延迟求值类型注解”的预期效果,属于结构性语法错误。from __future__ import annotations移动到文件第一行(在文档字符串"""之前)。💡 改进建议(不阻塞合并)
update_current_user_profile函数中,user_repository.save(user)执行后,代码立即调用了user_repository.find_by_id(user.id)重新查询用户。实际上,传入的领域实体user在第 301-303 行已经在内存中更新了属性(display_name和profile_completed),save方法仅负责持久化而不改变传入对象的状态。因此直接使用user构造返回响应即可,无需额外的数据库查询,建议删除fresh = ...这一行,直接返回UpdateProfileResponse(user=_user_profile(user))。✅ 良好实践
server_default="true"和default=True,确保了存量数据的兼容性和新数据的默认值正确。UpdateProfileRequest使用 Pydanticfield_validator对昵称进行了strip()处理,并正确校验了空白字符串和长度边界,有效防止了脏数据。🤖 由 AI 代码审查机器人自动生成 | 2026-09-06 04:04:57 | 模型:
🗑️ 预览环境已清理
PR #1728 已关闭或合并,对应的预览环境已被清理。