SIGN IN SIGN UP

fix(platform): normalize project-id inside GenericRequest payload

平台补全给出的 project 候选是 "org-xxx/ProjectName"(cmd/project.go
getProjectList),平台 handler 负责还原成纯 id。但 SDK 的 BaseGenericRequest 把
GetProjectId() override 成 payload 优先、却没有 override SetProjectId:
SetProjectId 写进 CommonBase,而 GetPayload() 末尾用 payload 覆盖 CommonBase
(ucloud/request/generic.go),于是平台的归一化被 payload 里的原值吃掉。

凡是把 ProjectId 放进 generic payload map 的产品都会中招,master 上已有三处:
  - products/umongodb/internal/umongodb/create_replset.go:61, completion.go:56
  - products/utidb/internal/tidb/api.go:49
  - products/sqlserver/internal/sqlserver/create.go:89, create_alwayson.go:70

用户按 Tab 补全 --project-id 后 "org-x/Name" 原样上行,网关报
RetCode 292 "Project [org-x/Name] not exists"(2026-07-14 对 api.ucloud.cn 实测)。
不按 Tab、手敲纯 id 不受影响,故一直未被发现。

修复:归一化后若值确实变了,把结果同步进 GenericRequest 的 payload。未发生
归一化时(已是纯 id 或为空,即绝大多数调用)直接返回,payload 一字不动,
行为与历史逐字节一致。

测试覆盖 master 上全部 generic 产品的传法(payload map / 仅 CommonBase /
无 project-id / typed request),断言 wire 上的最终值而非中间态。
E
Episkey committed
62eb03caa8ac4b554d58f25b160e4bd1008d0018
Parent: 4b9dad8