server/laf-cloud/百人赛生产发布清单.md
2026-09-24 17:59:52 +08:00

12 KiB
Raw Permalink Blame History

百人赛生产发布清单

开期规则更新:登录和过关上报不再自动开期。升级已部署旧开期逻辑的环境时,先更新 login、userLevel 移除调用,再更新 cloudRise/periods,然后更新 cloudRise/index、activityConfig/list 并使用新版客户端。HomeScene 检查解锁门槛、无已开启活动及上期结束超过 12 小时后显式请求开期;首次参与免冷却。此说明替代下文历史检查中的“登录开期”,并不扩展黄金矿工的发布范围。

检查日期:2026-09-23。用户补拉线上代码后,重新以 main@8ab07ab(更新N个复活礼包) 为基线;检查对象为 local@03d7b5f 加本次登录兼容修正。旧基线 0b9a0b9 的结论由本次复查更新。未连接生产数据库,未部署、未 push。

1. 发布结论

本次只上线百人赛:新增 8 个云函数/内部模块,更新 1 个已有函数 login,准备 3 个集合。按下表逐个发布 .ts 及对应 .yaml,不要整仓同步。

新版每日/周任务不在本次发布范围;login 继续沿用 main 的旧版四项任务刷新。黄金矿工已从本次必发的 login、activityConfig/list 移除运行依赖。其他文件中的黄金矿工实现仍保留,不能整目录部署后当作已经全局关闭。

更新 main 后发现的差异

新 main 比旧基线修改了 login 和 5 个支付函数。发布范围和集合数量不变,但旧 local 的 login 缺少线上新增的 reborn_Gift_2~5 补单处理,以及所有五档复活礼包支付确认后的 state=1 标记。直接覆盖会回退线上行为;本次已将 main 的这两段逻辑补入 local,保留百人赛接入和黄金矿工屏蔽。

5 个支付函数为 wx/KeFuInfo、wx/getOrderReward、wx/iosgetPayInfo、wx/iosorderPaySig、wx/orderPaySig。新 main 包含五档定价、订单归属/支付状态校验、客户端确认发奖兼容及重复导入清理。它们不在百人赛发布清单内,保持线上新版 main;不要用当前 local 的支付文件覆盖,否则会回退这些更新。本次没有合并整条 main 分支,也没有改动这些支付文件。

2. 精确函数清单与顺序

下列路径相对 laf-cloud/functions/;实际云函数名称以 YAML name 为准。

顺序 云函数名称(同名 .ts + .yaml) 类型 / HTTP 方法 本次作用
1 activityConfig/store 新增内部模块,methods: [] 公共活动配置版本、开关与索引
1 cloudRise/stats 新增内部模块,methods: [] 关卡统计数据,供对手模拟使用
1 cloudRise/rules 新增内部模块,methods: [] 三阶段匹配、胜负、超时规则
1 cloudRise/analytics 新增内部模块,methods: [] 数数埋点与失败重试
2 cloudRise/periods 新增内部模块,methods: [] 登录建立个人活动期与配置快照
3 cloudRise/index 新增玩家接口,POST 匹配、开局、结算、状态和奖励回执
4 cloudRise/admin 新增管理接口,POST 初始化索引、发布配置;校验 ADMIN_TOKEN
4 activityConfig/list 新增日程接口,GET / POST 只返回已登录玩家的个人百人赛期
5 login 更新已有函数,保持 GET / POST 登录开期,隐藏完整百人赛存档,屏蔽黄金矿工接入

cloudRise/index、activityConfig/list 与当前客户端实际请求路径一致。不要使用旧文档中的 cloudRise/cloudRise、cloudRise/cloudRiseAdmin 等名称。

现有依赖 Utils、jungleConfig、wucaiMigration 已与 main 对比,源码无差异,保持线上版本。userCoin、jungleTreasure 也与 main 完全一致,无需重复发布。统计 JSON 已内嵌在 cloudRise/stats.ts 中,data/、tools/、tests/、README、配置示例均不是云函数。

新 main 已包含 login 的 miniProgramWelfare 字段初始化和缺省返回,因此它不再是本次相对线上的增量;福利领取接口仍未包含在本次发布中。

3. 集合与索引

首次上线创建以下集合;如已存在则复用,不清空数据。

集合 数据与写入时机 是否需要预填
activityConfigs 公共版本配置,百人赛使用 activityId: "cloudRise"、recordType: "version" 需要发布一条有效百人赛模板,推荐调用 admin 的 save
cloudRiseSamples 每个玩家每期最多一条文档,samples 数组内最多三个已结算阶段,_id = runId 不需要;空集合可使用内置统计冷启动
cloudRiseRuns 整轮完成、失败、超时后的精简归档,不存对手数组 不需要

复用已有 users:增加 cloudRisePeriod 对象、cloudRiseState JSON 字符串;奖励余额仍保存在 coinAmount,不创建个人期集合、奖励集合或埋点集合。埋点待重试记录保存在活动存档中。已有 order、idcount、ab_config 等仍由原登录逻辑使用,无需为本次新建。

在 POST /cloudRise/admin 执行:

{ "action": "setup_indexes", "adminToken": "<ADMIN_TOKEN 的值>" }

该操作会调用以下 9 项索引创建;只有返回 code: 1 才算完成。

集合 索引 附加约束
users { taskTime: 1 } 匹配资料池查询使用,不是启用每日任务
users { onlyId: 1 } unique;部分条件 onlyId: { $type: "number" }
activityConfigs { activityId: 1, configVersion: 1 } unique;部分条件 recordType: "version";名称 activity_config_version
activityConfigs { activityId: 1, recordType: 1, status: 1, effectiveFrom: -1, publishedAt: -1 } 普通索引
activityConfigs { activityId: 1, "config.periodId": 1, publishedAt: -1 } 普通索引
cloudRiseSamples { "samples.stage": 1, "samples.start_level": 1, "samples.success_num": 1 } 阶段样本数组
cloudRiseSamples { uid: 1, periodId: 1 } unique;部分条件 schemaVersion: 2;名称 cloudRiseSamples_uid_period
cloudRiseRuns { uid: 1, periodId: 1 } 普通索引

上线前检查 users.onlyId 数字值没有重复,否则唯一索引会失败;不要为使索引通过而直接删除用户。配置、活动状态和样本由服务端维护,不给客户端直写权限。

main 中不存在百人赛模块,按本次首次上线场景无需运行配置迁移、旧样本迁移或历史归档精简。如果生产曾有 main 之外的人工部署记录,应先核对存量再决定,不能直接运行同时处理黄金矿工的 activityConfig/migrate.cjs。

本次不创建 goldMinerPlayerPeriods,也不创建任何每日/周任务相关集合。

4. 暂不发布的内容

内容 本次处理
goldMiner/ 全目录,包括配置、支付、管理、测试期、任务与网页 不发布,不设置 goldMiner/trigger.json 定时器,不发布黄金矿工配置
userLevel 相对 main 的黄金矿工进度接入不发布;保留线上 main
wx/orderPaySig、wx/iosorderPaySig、wx/KeFuInfo、wx/checkIos、wx/payCallBack、wx/getPayInfo、wx/iosgetPayInfo、wx/getOrderReward 均不属于百人赛依赖,保持线上 main,避免引入黄金矿工支付分支
dayTaskInfo、getTaskReward、dailyTaskService、dailyTaskConfig、dailyTaskDebug 及每日/周任务配置 不发布、不迁移任务数据;这些源码与 main 无新增差异,不代表仓库内所有 V2 接口源码已关闭
miniProgramWelfare main 之后的独立功能增量,本次不发布
rechargeStats 及 recharge-stats.trigger.json main 之后的独立统计增量,本次不发布、不新增定时器

本次实际隔离改动:

  • login 不再静态导入黄金矿工支付模块,不执行黄金矿工查单或补发;遇到该类订单保留原记录并跳过通用商品补发,避免误发或误删。
  • activityConfig/list 不再导入或查询黄金矿工;测试期开关、黄金矿工配置和历史数据都不能使其在此列表中出现。
  • 新版每日/周任务的登录调用原本已注释,继续保持;旧版每日任务仍正常刷新。

上次检查时未提交的 goldMiner/payment.ts 测试商品校验、wx/payCallBack.ts 的 pay_test 分流,已由用户提交为 03d7b5f。本次仍不改动,也不纳入发布清单。

5. 配置、上线验收与暂停

  1. 按函数顺序发布,并在启用百人赛模板前完成集合和索引准备。此活动不需要新增定时任务。
  2. 管理密钥实际读取 ADMIN_TOKEN,不是旧文档中的 CLOUD_RISE_ADMIN_TOKEN。复用已有值或在服务端设置,不下发客户端。
  3. 保留线上登录变量:WX_MINIGAME_APP_ID、WX_MINIGAME_APP_SECRET、IDCOUNT_NAME,确认计数器记录存在;保留原有 iOS 补单使用的商户配置和私钥。百人赛本身不增加支付依赖。
  4. 正式环境 PAYMENT_APP_ENV 应为 production 或保持未设置的生产默认行为,不用 test;正式模板 durationHours 必须为正整数小时。现有依赖 thinkingdata-node 需支持 trackFirst/flush/close,登录继续依赖 ip2region。实际生产安装状态需在控制台确认。
  5. 对 cloudRise/admin 发送 save,参考 functions/cloudRise/cloudRise-config.publish.example.json:替换 adminToken、configVersion、periodId、startsAt、endsAt,核对正式门槛、时长和三个奖池。示例不是自动发布的生产配置;startsAt 必须晚于实际保存时间,版本标识不可覆盖。enabled: true 在请求顶层,不放进 config。
  6. 模板生效后成功登录才创建个人期。endsAt 不会让模板自动停止以后登录的新开期;个人结束时间是登录开期时间加 durationHours。停止新开期时,将最新已生效版本记录的外层 enabled 设为 false,不要删除模板。已有个人期、挑战和待保存奖励继续有效;这是暂停新开期,不是立即清空所有活动。
  7. 匹配资料池按用户确认保留 超过 2 个自然月未活跃 的现有规则:users.onlyId != 当前玩家、0 < taskTime < inactiveBefore(now)。没有符合条件的玩家资料时匹配会失败;cloudRiseSamples 可以为空,用户头像昵称资料池不可为空。旧客户端 PRD 中“三个月”的文字应以本次确认为准。
  8. 达到门槛的专用账号执行:登录 → 携带 users.onlyId 和 token 查 activityConfig/list → cloudRise/index 的 status → prepare_match → cancel_match → 重新 prepare_match/confirm_match → begin/finish → save_reward → 下一阶段。检查仅有百人赛入口、99 个对手、同一期截止时间不延长、重复奖励上报不重复入账、失败/到期/三阶段完成后列表隐藏、下次登录才重新开期。
  9. 检查普通登录和普通订单补发保持正常;确认没有黄金矿工查询、订单创建或定时器被新增。核对样本、归档、金币余额和真实埋点。匿名活动列表为空是预期行为,不能用空请求判断百人赛配置是否正常。

6. 本地验证

以下回归覆盖百人赛状态与奖励、并发和重试、配置与索引、数数发送、个人期、活动列表隔离、登录隔离、当前客户端联动,以及本次新增的五档 iOS 复活礼包补单兼容验证:

重新验证结果:140/140 通过,0 跳过。新增用例先在修正前复现五档补单失败,再在补齐 main 逻辑后全部通过;同时确认黄金矿工订单不进入旧 iOS 商户补单。

node --test --test-reporter=spec laf-cloud/functions/cloudRise/tests/cloud-rise.test.mjs laf-cloud/functions/cloudRise/tests/analytics.test.mjs laf-cloud/functions/activityConfig/tests/list.test.mjs laf-cloud/tests/login-cat-arr.test.mjs laf-cloud/tests/login-wucai-state.test.mjs laf-cloud/tests/login-ios-reborn.test.mjs
node laf-cloud/functions/cloudRise/tools/generate-cloud-rise-stats.mjs --check

统计数据与 stats.ts 校验通过;9 个发布函数及递归依赖的 TypeScript 语法、YAML 名称和依赖边界检查通过,无黄金矿工或新版每日任务 import。检查中已修正旧管理密钥测试名、统计生成器的旧路径、客户端测试漏加载 apiBaseUrl,以及与现有 2 个月资料池、main 的 users 登录路由不一致的旧断言;未更改这些业务规则。

这些是本地模拟及客户端源码联动测试,不证明生产集合、索引、环境变量或函数已经部署。仍须完成上述生产环境检查和专用账号冒烟。