a5634c5f85
- GET /api/v1/me 补 nickname 与 avatarUrl:nickname 为 DB 原值不做 username 回退(/me 是本人编辑态,回退会让用户误以为已设过昵称;他人视角的回退仍在 /internal/users/profiles 的 SQL 层,M3 T3-05 已交付);avatarUrl 每次现签 预签名 GET,非 ready 或存储未配置一律降级为 null 而非 500 - 新增 PATCH /api/v1/me:nickname 与 avatarAssetId 均为三态语义——键缺省即 不改、显式 null 即清空、给值即设置;空 patch 答 400/40000 而非静默 200 - nickname 校验对齐 ck_users_nickname:btrim 后按码点计 1~32(PostgreSQL char_length 数码点,按 UTF-16 长度校验会误拒 32 个 emoji),纯空白答 40000 而非隐式清空(清空只留显式 null 一种表达) - avatarAssetId 沿用 T3-03 引用侧协议:不存在/非本人/已删/用途非 user_avatar 均答 404/40405(防枚举合并),本人 user_avatar 未就绪答 422/42203 - 写入走列级选择性 UPDATE 而非读-合并-写:并发的昵称与头像 PATCH 互不覆盖, 故 /me 无需暴露版本号乐观锁 - MediaProperties.allowedPurposes 增 user_avatar/pet_avatar(ADR-022:purpose 无 CHECK 约束,新用途只改配置,零 Flyway 迁移) - 测试 +22(19 无存储降级路径 + 3 真实 MinIO 全链路签名/下载),user 模块 100 → 131 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>