完善多赛道联调与全局产品架构
This commit is contained in:
139
b2f.md
139
b2f.md
@@ -1,6 +1,6 @@
|
||||
# b2f
|
||||
> 文档版本:v1.0
|
||||
> 最后更新:2026-04-02 09:01:17
|
||||
> 文档版本:v1.3
|
||||
> 最后更新:2026-04-02 15:25:40
|
||||
|
||||
|
||||
说明:
|
||||
@@ -54,6 +54,51 @@
|
||||
- frontend 是否确认正式流程只消费上述字段,不再自行推断 release URL
|
||||
- 是否已解决:否
|
||||
|
||||
### B2F-015
|
||||
|
||||
- 时间:2026-04-02
|
||||
- 谁提的:backend
|
||||
- 当前事实:
|
||||
- backend 已阅读前端多赛道文档:
|
||||
- [多赛道 Variant 五层设计草案](D:/dev/cmr-mini/doc/gameplay/多赛道Variant五层设计草案.md)
|
||||
- [多赛道 Variant 前后端最小契约](D:/dev/cmr-mini/doc/gameplay/多赛道Variant前后端最小契约.md)
|
||||
- backend 认可第一阶段先做“最小契约”,不先做完整后台模型
|
||||
- backend 当前建议的第一阶段正式口径为:
|
||||
- `play.assignmentMode`
|
||||
- `play.courseVariants[]`
|
||||
- `id`
|
||||
- `name`
|
||||
- `description`
|
||||
- `routeCode`
|
||||
- `selectable`
|
||||
- `launch.variant.id`
|
||||
- `launch.variant.name`
|
||||
- `launch.variant.routeCode`
|
||||
- `launch.variant.assignmentMode`
|
||||
- `session / ongoing / recent / result` 摘要中补:
|
||||
- `variantId`
|
||||
- `variantName`
|
||||
- `routeCode`
|
||||
- backend 第一阶段实现目标仍然保持保守:
|
||||
- 一个 session 只绑定一个最终 `variantId`
|
||||
- `launch` 返回最终绑定结果
|
||||
- 恢复链不重新分配 variant
|
||||
- 当前兼容性约束:
|
||||
- 如果 `assignmentMode=manual` 且前端暂时未传 `variantId`
|
||||
- backend 当前会先回退到首个可选 variant,避免旧主链直接被打断
|
||||
- backend 当前已完成第一阶段最小实现:
|
||||
- `GET /events/{eventPublicID}/play`
|
||||
- `POST /events/{eventPublicID}/launch`
|
||||
- `GET /me/entry-home`
|
||||
- `GET /sessions/{sessionPublicID}`
|
||||
- `GET /sessions/{sessionPublicID}/result`
|
||||
- `GET /me/results`
|
||||
- `GET /me/sessions`
|
||||
- 上述链路已能携带第一阶段 variant 摘要字段
|
||||
- 需要对方确认什么:
|
||||
- frontend 可按这组字段开始第一阶段联调
|
||||
- 是否已解决:是
|
||||
|
||||
---
|
||||
|
||||
## 已确认
|
||||
@@ -121,6 +166,49 @@
|
||||
- frontend 继续按当前补报 / 重试逻辑联调
|
||||
- 是否已解决:是
|
||||
|
||||
### B2F-016
|
||||
|
||||
- 时间:2026-04-02
|
||||
- 谁提的:backend
|
||||
- 当前事实:
|
||||
- backend 已确认 `launch` 当前关键字段为前端正式联调契约:
|
||||
- `resolvedRelease.manifestUrl`
|
||||
- `resolvedRelease.releaseId`
|
||||
- `business.sessionId`
|
||||
- `business.sessionToken`
|
||||
- `business.sessionTokenExpiresAt`
|
||||
- 当前阶段 backend 不会单边调整这些字段名或层级
|
||||
- 如后续确需调整,backend 会先在 `b2f.md` 明确通知,再安排联调变更
|
||||
- 需要对方确认什么:
|
||||
- frontend 继续按当前字段接入,不做额外推断
|
||||
- 是否已解决:是
|
||||
|
||||
### B2F-017
|
||||
|
||||
- 时间:2026-04-02
|
||||
- 谁提的:backend
|
||||
- 当前事实:
|
||||
- backend 已完成对 ongoing 口径的代码回归确认
|
||||
- 当前实现中:
|
||||
- 只有 `launched` 和 `running` 会被识别为 ongoing
|
||||
- `cancelled`、`failed`、`finished` 都不会再进入 ongoing
|
||||
- `/me/entry-home` 与 `/events/{eventPublicID}/play` 当前都复用同一 ongoing 判定逻辑
|
||||
- `/me/results` 当前只返回终态 session:
|
||||
- `finished`
|
||||
- `failed`
|
||||
- `cancelled`
|
||||
- 当前首页摘要、play 摘要、result 详情都会复用同一组 session 基础摘要字段:
|
||||
- `id`
|
||||
- `status`
|
||||
- `eventId`
|
||||
- `eventName`
|
||||
- `releaseId`
|
||||
- `configLabel`
|
||||
- `routeCode`
|
||||
- 需要对方确认什么:
|
||||
- frontend 可以按这套 ongoing / result 口径继续回归
|
||||
- 是否已解决:是
|
||||
|
||||
---
|
||||
|
||||
## 阻塞
|
||||
@@ -226,6 +314,52 @@
|
||||
- 无
|
||||
- 是否已解决:是
|
||||
|
||||
### B2F-018
|
||||
|
||||
- 时间:2026-04-02
|
||||
- 谁提的:backend
|
||||
- 当前事实:
|
||||
- backend 已补一条可联调的 `manual` 多赛道 demo 活动:
|
||||
- `eventPublicID = evt_demo_variant_manual_001`
|
||||
- `releaseId = rel_demo_variant_manual_001`
|
||||
- `channelCode = mini-demo`
|
||||
- `channelType = wechat_mini`
|
||||
- 当前 demo 配置为:
|
||||
- `assignmentMode = manual`
|
||||
- `courseVariants = [variant_a, variant_b]`
|
||||
- 当前两条可选赛道:
|
||||
- `variant_a`
|
||||
- `name = A 线`
|
||||
- `routeCode = route-variant-a`
|
||||
- `variant_b`
|
||||
- `name = B 线`
|
||||
- `routeCode = route-variant-b`
|
||||
- 该活动已由 `POST /dev/bootstrap-demo` 自动准备
|
||||
- 需要对方确认什么:
|
||||
- 无
|
||||
- 是否已解决:是
|
||||
|
||||
### B2F-019
|
||||
|
||||
- 时间:2026-04-02
|
||||
- 谁提的:backend
|
||||
- 当前事实:
|
||||
- backend 已完成 `variant_b` 的 service 层回归验证
|
||||
- 已确认从 `launch` 选定的 `variantId` 会稳定回流到:
|
||||
- `GET /me/entry-home`
|
||||
- `GET /sessions/{sessionPublicID}/result`
|
||||
- `GET /me/results`
|
||||
- 实测链路为:
|
||||
- `play.assignmentMode=manual`
|
||||
- `play.courseVariants=2`
|
||||
- `launch.variant.id=variant_b`
|
||||
- `entry-home recent.variantId=variant_b`
|
||||
- `result.session.variantId=variant_b`
|
||||
- `results[0].session.variantId=variant_b`
|
||||
- 需要对方确认什么:
|
||||
- 无
|
||||
- 是否已解决:是
|
||||
|
||||
---
|
||||
|
||||
## 下一步
|
||||
@@ -244,6 +378,7 @@
|
||||
- frontend 当前优先配合:
|
||||
- 用当前 demo release 回归 `play -> launch -> map load`
|
||||
- 回归“继续恢复 / 放弃恢复”两条路径
|
||||
- 如确认进入多赛道第一阶段联调,请先回复 `B2F-015`
|
||||
- 如发现状态口径不一致,直接在 `f2b.md` 标具体接口和返回值
|
||||
- 是否已解决:否
|
||||
|
||||
|
||||
Reference in New Issue
Block a user