35 lines
4.8 KiB
Markdown
35 lines
4.8 KiB
Markdown
# F1/F2/F3实施方案与评审
|
||
|
||
2026-09-21,用户已要求继续执行。先核对审查意见与服务端CreateClub/QuitClub实现及客户端调用者,再记录以下裁决。
|
||
|
||
## F3 退出入口
|
||
通过:QuitAct在第一个await及UI/配置清理之前,若QuitStage.Logout=true,消费该标记并调用Logout。无需注销路径不调用Logout。AggUserService先base.Logout使认证代际/HTTP失效,再退出渠道SDK;QuitAct捕获注销/Hub释放异常并继续必要清理。OnStarted不再重复注销。测试实际QuitAct在Hub释放阻塞、释放异常、非注销及重复启动路径上的顺序;HTTP/API迟到仍由既有版本保护测试覆盖,SDK真实回调另列限制。
|
||
文件边界:QuitAct、AggUserService,必要时UserService退出字段顺序以保证立即失效。
|
||
|
||
## F1 身份清单
|
||
以下本人字段统一取已授权的ApiPlayerId并固定请求时会话版本:GetClubDetails、CreateClub、ApplyClub、GetApplyList、QuitClub、Demote、Promote、Kickout、ReadClubEvent、ClubSingin、GetServiceEvent。GetSelfClub已有修复保留。
|
||
CreateClub的internalIdToPlayerId自身缓存及ClubSingin系统消息改为同一数字ID。UserService.UserId与PlayFab存档命名空间不改。
|
||
目标字段保持目标含义:HandleApply.applyId来自申请列表GetApplyList.userIDList;Demote/Promote/Kickout目标来自GetClubDetails.clubPlayerProfiles.playerId;QuitClub.appointId来自成员列表选择。服务端GetPlayerID使用十进制PlayerIdUtil.ToString。旧DTO/UI名称playFabId暂保留,但不能将目标替成本人;提交目标前验证十进制正数。HandleApply空字符串批量拒绝、QuitClub的0/空为不指定继任者保留。
|
||
未认证、目标非法不发请求。每个受改方法await返回后检查会话仍有效,二次聊天await也检查。副作用尽量在成功响应之后执行;不宣称其他服务所有跨账号调用已完成隔离。
|
||
|
||
## F2 响应成功语义
|
||
CreateClub本地契约code0新建、1已有俱乐部、2失败。调用UI见非null会扣创建消耗,因此仅code0且clubInfo非空/有效ID返回成功;code1不伪装创建成功、不重复扣减、不覆盖现有状态,用户随后可GetSelfClub同步。错误/空/非法JSON/缺失code/业务失败/过期响应返回null且不改状态,不发成功事件。
|
||
QuitClub仅显式code0或1(已不在俱乐部)确认不再有会员身份后清理;code2/网络失败/非法响应保留原状态。明确解析code整数,不能把{}默认code0当成功。成功才退出聊天、清状态、提示、发事件。
|
||
同批触及的Kickout/HandleApply移除原预先修改成员计数/申请列表行为,显式code0后处理;签到不在失败前写本地时间,其他code语义保持服务端合同。
|
||
文件边界:ClubService;必要测试宿主提取原方法/实际源文件,不改服务器、不做正式服会员/资产操作。
|
||
|
||
## 验收与风险
|
||
实际生产源编译、受改方法隔离测试(模拟传输/引擎)覆盖缺失授权、本人/目标区分、成功/业务失败/网络空结果/HTTP映射失败、旧响应无副作用;实际QuitAct顺序测试。生成脚本/测试命令/结果均存盘。独立review发现阻塞项修复后复审。
|
||
不会执行真实创建/退出俱乐部;本地契约不等同线上版本保证。原有ClubService其他外围功能以及渠道SDK全局内部状态仍须专项验收,不扩大本批结论。
|
||
|
||
裁决:上述方案与开发边界完整评审通过,允许按F3→F1/F2顺序实施。每个小任务完成记录日志。
|
||
|
||
### 调用链补充评审
|
||
成员操作UI仍用旧UserId判断本人,会把本人展示为可踢/可指定继任者。补充通过:ClubChooseHeirPopupPanel、ClubInfoPopupPanel、ClubApplyPopupPanel的服务器成员ID与本人比较改ApiPlayerId;服务方法拒绝以自己作为继任者/升降职/踢人目标。ClubService.SendSystemMessage2的本人消息前缀同步改数字ID并检查授权。其他聊天渲染/体力捐赠仍是后续清单,不借此宣称整个社交模块已迁移。
|
||
|
||
### 独立review反馈补充裁决
|
||
服务器HandleApply空playerId批量拒绝返回code4;通过补充仅在!isAgree且applyId为空时接受4,不把空ID同意作为合法操作。签到原先预设时间隐式抑制连点,现改为成功后写时间,需加入按会话的在途防重与当天成功判断;失败释放在途状态允许重试,不提前写存档。相应回归必须补齐后再验收。
|
||
|
||
### 签到调用者补充
|
||
review确认SocialClubJoined.OnSign原先依赖同步更新signTime立即刷新按钮。补充通过文件边界:ClubSingin改Task,OnSign等待完成,期间禁用按钮,finally在同会话且UI仍存活时刷新CD并恢复交互;非同会话不刷新。使用完整Date而非DayOfYear比较,避免跨年同日误判。模拟测试覆盖并发/失败重试/旧会话不发奖。
|