Files
cmr-mini/doc/backend/后端总体架构与当前执行清单.md

290 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 后端总体架构与当前执行清单
> 文档版本v1.0
> 最后更新2026-04-07 14:08:00
本文档写给 backend 当前开发线程,目标是用一份短文档说明两件事:
1. 当前系统总体架构已经收口到什么程度
2. backend 现在最该做什么,不该做什么
本文档不替代以下方案文档,而是它们的执行版摘要:
- [后台生产闭环架构草案](/D:/dev/cmr-mini/doc/backend/后台生产闭环架构草案.md)
- [后台游戏定制支持方案](/D:/dev/cmr-mini/doc/backend/后台游戏定制支持方案.md)
- [运维后台第一期方案](/D:/dev/cmr-mini/doc/gameplay/运维后台第一期方案.md)
---
## 1. 当前总体架构
当前系统建议继续按以下链路理解,不要回退到“散装配置 + 临时页面”的推进方式:
```text
地图运行域
-> Place / MapAsset / TileRelease
-> CourseSource / CourseSet / CourseVariant
-> MapRuntimeBinding
活动运营域
-> Event / EventPresentation / ContentBundle
-> EventRelease
客户端消费域
-> event detail / play / launch / result / entry-home
-> frontend 只消费发布后的稳定摘要
```
### 当前已经稳定的主链
- `Event`
- `EventRelease`
- `Session`
- `launch.runtime`
- `currentPresentation / currentContentBundle`
- `play.canLaunch`
### 当前已经明确的原则
- 客户端只消费**已发布 release**,不消费草稿
- 进入游戏是否允许,统一以 `play.canLaunch` 为准
- `session` 才是最终绑定运行对象和多赛道 variant 的事实来源
- frontend 不再继续扩散式读取散装配置
---
## 2. backend 当前最重要的五层职责
backend 后续支持游戏定制,建议继续按这五层推进:
### 2.1 活动层
负责:
- 活动列表
- 活动详情
- 活动状态
- 当前发布版本
- 当前是否允许进入
### 2.2 地图与赛道层
负责:
- 地点
- 地图
- 瓦片版本
- KML / 赛道源输入
- 赛道集合
- 多赛道 variant
### 2.3 玩法层
负责:
- 玩法模板
- 少量可调规则项
- 不负责暴露全量碎字段
### 2.4 运营内容层
负责:
- `EventPresentation`
- `ContentBundle`
- 当前 active 绑定
- 发布前完整性检查
### 2.5 发布层
负责:
- build / publish / release
- 当前发布
- 历史版本
- 回滚
- 完整性校验
---
## 3. 当前 backend 最该做什么
当前 backend 不建议继续四处补小接口,而应优先把以下 4 条生产链做稳。
### 3.1 生产对象链做稳
优先保证以下对象关系稳定:
- `Place`
- `MapAsset`
- `TileRelease`
- `CourseSource`
- `CourseSet`
- `CourseVariant`
- `MapRuntimeBinding`
- `EventPresentation`
- `ContentBundle`
- `EventRelease`
要求:
- 可创建
- 可查询
- 可绑定
- 可发布
### 3.2 发布完整性做稳
发布链当前应继续保持:
-`runtime` 不可进入
-`presentation` 不可进入
-`content bundle` 不可进入
-`manifest` 不可进入
- 缺当前发布 release 不可进入
也就是:
- `play.canLaunch`
- `launch`
必须共享同一套发布完整性语义。
### 3.3 多赛道生产链做稳
多赛道当前不是前端显示问题,而是 backend 生产链问题最容易出错的部分。
backend 当前应确保:
- `assignmentMode` 真正进入发布物
- `play.courseVariants[]` 真正进入发布物
- `preview.variants[]` 与可选 variant 一一对应
- `launch.variant` 与最终 session 绑定一致
### 3.4 准备页地图预览支撑字段做稳
准备页地图预览 V1 已进入前端实现,因此 backend 当前应稳定提供:
- `preview.mode`
- `preview.baseTiles`
- `preview.viewport`
- `preview.variants[].controls`
- `preview.selectedVariantId`
当前前端策略是:
- 底图优先仍走 manifest 正式瓦片
- variant 点位优先走 `play.preview`
所以 backend 当前重点不是改前端展示,而是确保:
- variant 预览点位与正式 variant 对齐
- preview 数据能稳定进入 `event detail / play`
---
## 4. 当前 frontend 已经接住的东西
backend 当前可以默认前端已经稳定消费以下摘要:
### 4.1 活动链
- 活动列表最小卡片字段
- 活动详情 `status / canLaunch / currentPresentation / currentContentBundle`
- 准备页摘要
### 4.2 运行链
- `launch.runtime`
- `launch.variant`
- `launch.presentation`
- `launch.contentBundle`
### 4.3 会话链
- `ongoingSession`
- `finish(cancelled)`
- 恢复 / 放弃恢复
### 4.4 结果链
- 单局结果页
- 历史结果页
- 首页 ongoing / recent 摘要
也就是说backend 当前新增字段时,优先考虑是否会影响以上已稳定消费链路。
---
## 5. backend 当前不要做什么
当前阶段不建议 backend 现在优先去做:
- 全量 JSON 编辑器
- 复杂可视化后台搭建器
- 一次性铺开所有高级配置项
-`/dev/workbench` 继续膨胀成正式后台
- 先做复杂审核流/权限流
一句话:
**现在要做的是生产闭环,不是万能后台。**
---
## 6. 当前最小执行清单
backend 当前建议只盯这份最小执行清单:
### A. 发布对象完整性
- [ ] `play.canLaunch``launch` 阻断语义一致
- [ ] 发布物缺任一核心绑定时不能进入游戏
### B. 多赛道
- [ ] `assignmentMode` 稳定进入发布物
- [ ] `courseVariants[]` 稳定进入发布物
- [ ] `launch.variant` 与最终 session 一致
### C. 预览
- [ ] `play.preview` 稳定进入 `event detail / play`
- [ ] `preview.variants[]` 与 variant 对齐
- [ ] 单赛道 / 多赛道都可稳定预览
### D. 运维平台第一期
- [ ] 活动列表/详情
- [ ] 运行绑定
- [ ] 展示/内容绑定
- [ ] 发布记录
- [ ] 与 workbench 分工清晰
---
## 7. 下一步建议顺序
backend 现在建议按以下顺序推进:
1. 先稳发布完整性和多赛道发布链
2. 再稳准备页地图预览支撑字段
3. 再做运维后台第一期页面与对象关系
4. 最后再扩高级定制项
这样可以避免:
- 主链还没稳就去做复杂后台 UI
- 生产对象还没定就提前开放全量配置
---
## 8. 一句话结论
backend 当前应继续围绕“活动生产与发布平台”推进,而不是回到散装配置模式。
现在最该做的不是加更多零碎接口,而是做稳这三件事:
- 发布完整性
- 多赛道生产链
- 运维后台第一期的对象与页面闭环