文档版本:v1.10 最后更新:2026-04-03 20:05:00
本文档用于明确当前系统后续必须建立的后台生产闭环,重点回答以下问题:
本文档当前已经从初版的“地图 / 赛道 / 活动 / 发布”四对象方案,升级为更完整的双域骨架:
目标是让后端线程后续可以按统一对象模型落地,而不是继续围绕散装文件、散装页面地址和临时配置推进。
当前系统后续不应继续按“前端页面 + 若干散装配置”的方式推进,而应正式收口成一套后台生产与发布闭环。
当前补充确认:
EventEventReleaseSession
继续保留建议长期按以下链路理解:
地图资源输入
-> 地点 / 地图资产管理
-> 瓦片生成
-> 瓦片版本发布
KML 输入
-> 赛道解析
-> 赛道集合 / 赛道方案管理
-> 赛道版本发布
活动卡片输入
-> 活动展示配置
-> 绑定地图 / 赛道 / 规则 / 内容包
-> 活动发布版本
最终:
Event Release
-> launch
-> manifest / config / tile release / variant
-> 客户端消费
核心判断:
当前建议把后台对象正式拆成两大域。
负责:
负责:
这两个域必须分开管理,但要通过运行绑定和发布版本连接起来。
Place作用:
建议最小字段:
placeIdnameregioncoverUrldescriptioncenterPointstatus关键原则:
MapAsset作用:
建议最小字段:
mapIdplaceIdnamemapTypecoverUrldescriptionsourceFilesstatus关键原则:
TileRelease作用:
建议最小字段:
tileReleaseIdmapIdversiontileBaseUrlmetaUrlstatuspublishedAt关键原则:
TileReleaseCourseSet作用:
建议最小字段:
courseSetIdplaceIdmapIdmodenamedescriptionstatus关键原则:
CourseSetCourseSet 是赛道方案集合,不是具体方案本身CourseVariant作用:
建议最小字段:
variantIdcourseSetIdnamerouteCodemodecontrolCountdifficultystatussourceIdconfigPatchisDefault关键原则:
CourseVariantCourseVariantCourseVariant,不直接认 KMLCourseSource作用:
建议最小字段:
sourceIdtypefileUrlchecksumimportedAtparserVersion关键原则:
CourseVariantEvent作用:
建议最小字段:
eventIdtitlesubtitleeventTypestatustimeWindowdefaultExperienceplayModecurrentPresentationIdcurrentBundleId关键原则:
EventeventType 不同,例如:
default_experiencestandard_eventcustom_campaignEventPresentation作用:
建议最小字段:
presentationIdeventIdcardSchemadetailSchematemplateKeystatusversion关键原则:
ContentBundle作用:
建议最小字段:
bundleIdnamebundleTypeassetManifestversionstatus资源类型可包括:
关键原则:
ContentBundleMapRuntimeBinding作用:
建议最小字段:
runtimeBindingIdeventIdplaceIdmapIdtileReleaseIdcourseSetIdcourseVariantIdconfigReleaseId关键原则:
EventRelease作用:
建议最小字段:
eventReleaseIdeventIdpresentationIdbundleIdruntimeBindingIdmanifestUrlconfigUrlstatuspublishedAtrollbackFrom关键原则:
EventReleaseEventRelease 必须版本化、可回滚、可追踪建议支持两类入口:
最小流程:
PlaceMapAssetTileRelease建议后台状态:
建议支持:
CourseSourceCourseVariantCourseSet关键要求:
CourseVariant,不再直接依赖原始 KML建议继续保持当前 H5 + API 快搭方向,但后台对象要正式化。
最小流程:
EventEventPresentationContentBundleMapRuntimeBindingEventRelease关键要求:
第一阶段建议只做 5 个后台模块,不要一开始铺太大。
负责:
负责:
CourseSetCourseVariant负责:
负责:
负责:
补充说明:
/dev/workbench/dev/workbench 当前定位应当是:
后续客户端不应直接消费后台散装对象,而应以发布产物为准。
客户端正式消费边界建议为:
launchmanifestUrlconfigUrleventReleaseIdplace/map/tile/course/variant 摘要也就是说:
建议 backend 在第一阶段把新增生产骨架接口接入 /dev/workbench,但范围严格控制。
PlaceMapAssetTileReleaseCourseSourceCourseSetCourseVariantMapRuntimeBindingEventPresentation 可视化搭建ContentBundle 资源管理台设计原则:
当前 /dev/workbench 只承担“第一阶段生产骨架联调台”的角色,不承担正式后台系统角色。
在第一阶段生产骨架对象已经落库、接口已接入 workbench 之后,下一步建议进入真正的“最小接线”阶段。
MapRuntimeBinding 和现有 EventRelease 接起来launchEventRelease 挂接 runtimeBindingId目标:
建议最少包括:
runtimeBindingIdplaceIdmapIdtileReleaseIdcourseSetIdcourseVariantIdlaunch 增加兼容性的 runtime 块要求:
resolvedReleasebusinessvariantruntime 摘要块在第三刀已经完成:
MapRuntimeBinding -> EventReleaselaunch.runtime 兼容透出之后,下一步建议进入发布闭环阶段。
目标:
EventRelease 在 publish 时就直接带上 runtimeBindingId建议顺序:
runtimeBindingId要求:
runtimeBindingIdEventRelease要求:
/dev/workbench 的发布操作里增加 Runtime Binding 选择项runtimeBindingId要求:
Get Releaselaunch继续稳定返回最小 runtime 摘要,便于前端和总控验证发布结果是否完整。
关键原则:
在第四刀已经完成:
runtimeBindingIdruntime之后,下一步建议进入前端正式接线阶段。
目标:
launch.runtime建议顺序:
launch.runtime最先展示:
placemapcourse variantrouteCode要求:
要求:
关键原则:
runtime 摘要开始接,不要求一次性重构所有页面resolvedRelease / business / variant 旧字段继续保留在第五刀前端摘要接线已经完成第一轮之后,当前主线建议切换为:
EventPresentationContentBundleEventRelease这一组对象的正式化落地。
当前建议优先做:
EventPresentation 最小落库ContentBundle 最小落库EventRelease 明确绑定:
presentationIdbundleIdruntimeBindingId当前不建议继续优先扩:
在第六刀已经完成:
EventPresentation 最小落库ContentBundle 最小落库EventRelease 已绑定:
presentationIdbundleIdruntimeBindingIdpresentationIdcontentBundleIdruntimeBindingId之后,下一步建议进入活动运营域第二阶段第二刀。
目标:
EventPresentation / ContentBundle 从“后台对象”进入“可查询、可验证、可消费的发布摘要”建议顺序:
event detail 透出当前展示与内容包摘要建议最少透出:
currentPresentation
presentationIdtemplateKeyversioncurrentContentBundle
bundleIdbundleTypeversionGet Release 透出完整最小摘要建议 release detail 同时包含:
presentationcontentBundleruntime其中前两者以摘要形式返回即可,避免一开始就下发复杂 schema。
launch 增加兼容性的活动运营摘要块在保持旧字段与当前 runtime 不变的前提下,新增:
presentationcontentBundle建议最少包括:
presentationIdtemplateKeybundleIdbundleType如果 publish 未显式传入:
presentationIdcontentBundleId允许按 event 当前默认配置自动补齐。
关键原则:
在第七刀已经完成之后,当前下一步建议切到:
EventRelease 成为统一可验证的活动运营发布对象ContentBundle 不再只靠手工创建,而有统一导入入口目标:
event detail / event play / launch / release detail 对活动运营摘要的返回语义一致建议 release detail 最少固定透出:
presentation
presentationIdtemplateKeyversioncontentBundle
bundleIdbundleTypeversionruntime
runtimeBindingIdplaceIdmapIdtileReleaseIdcourseVariantId这一步的意义是:
EventRelease 真正成为客户端、总控、workbench 都能验证的统一发布对象ContentBundle 统一导入入口目标:
ContentBundle当前阶段建议只做最小导入能力:
而不在这一刀里做:
关键原则:
ContentBundle在第八刀已经完成之后,当前下一步建议切到:
EventPresentation 统一导入入口Event 当前默认 active 绑定稳定化EventPresentation 统一导入入口目标:
当前阶段建议只做最小导入能力:
建议最小字段:
templateKeysourceTypeschemaUrlversiontitle不在这一刀里做:
Event 默认 active 绑定目标:
Event 当前默认使用的:
presentationcontentBundleruntimeBinding这样 publish 在未显式传入时,才有稳定默认继承基础。
建议至少明确:
currentPresentationIdcurrentContentBundleIdcurrentRuntimeBindingId建议 workbench 增加:
Import Presentation关键原则:
Event 继续是业务编排壳EventPresentation 和 ContentBundle 都走统一导入入口建议先把一次活动上线收成最小闭环:
EventReleaselaunch 消费该 EventRelease这就是后续联调和上线的最小标准流程。
结合 backend 当前已有骨架,建议第一阶段按以下方式推进:
第一阶段建议优先落库:
PlaceMapAssetTileReleaseCourseSourceCourseSetCourseVariantMapRuntimeBinding原因:
Event / EventRelease / Session 主链侵入最小第一阶段建议:
EventEventReleaseEventPresentation 与 ContentBundle 先作为架构对象明确下来第一阶段:
resolvedReleasebusinessvariant第二阶段:
placeIdmapIdtileReleaseIdcourseVariantIdeventReleaseId这样可以避免打断当前已稳定的前后端联调主链。
当前建议优先定以下内容,不要先陷入后台 UI 细节:
Place 的最小字段与状态机MapAsset / TileRelease 的最小字段与版本关系CourseSet / CourseVariant / CourseSource 的最小字段与 KML 解析结果结构Event / EventPresentation / ContentBundle 的最小字段与引用关系MapRuntimeBinding / EventRelease 的发布与回滚规则这些一旦定下来:
就都能真正闭环。
当前最重要的不是继续加页面,而是先把后台生产闭环正式化。
后续整个系统建议围绕以下双域骨架继续收口:
PlaceMapAssetTileReleaseCourseSetCourseVariantCourseSourceEventEventPresentationContentBundleMapRuntimeBindingEventRelease只有这套对象模型和三条输入链定下来,地图、KML、活动卡片三类资产才能真正形成可维护、可发布、可回滚的完整生产体系。