Skip to content

[PRD] 物模型快照生命周期与回滚管理 #12

@ronger-x

Description

@ronger-x

[PRD] 物模型快照生命周期与回滚管理

子仓库实现 Issue

仓库 Issue 说明
rymcu/mortise-aiot #19 快照回滚、删除、生命周期规则、权限与测试
rymcu/admin-aiot #5 版本历史管理 UI、回滚 / 删除交互、生命周期提示

问题陈述

当前 Mortise AIoT 模块已经具备物模型快照、版本列表和 diff 对比能力,但快照能力仍停留在“可查看”阶段,尚未形成完整的版本生命周期管理。

从用户视角看,主要问题有:

  1. 管理员可以查看历史快照和版本差异,但无法把某个历史快照恢复为可编辑草稿。
  2. 快照没有删除与保护规则,无法形成清晰的生命周期边界。
  3. 当前版本历史更像只读查看器,而不是可运营的版本管理工具。

这意味着物模型快照虽然已经“能记录、能对比”,但还不能真正支撑版本回滚、审计和长期演进管理。

解决方案

在现有快照列表和 diff 能力基础上,补齐一轮“生命周期与回滚管理”:

  1. 后端新增快照回滚与删除能力。
  2. 明确快照生命周期规则,例如关键版本保护和删除限制。
  3. 前端在现有版本历史基础上补充回滚、删除和风险提示入口。
  4. 回滚后恢复为草稿状态,再由用户确认后重新发布,避免直接覆盖线上版本。

本期目标不是重写版本历史界面,而是把快照从“查看能力”升级为“可管理能力”。

用户故事

  1. 作为物模型管理员,我希望查看完整的版本历史,以便追踪每次发布的演变。
  2. 作为物模型管理员,我希望将某个快照恢复为草稿,以便快速回滚到已知稳定版本。
  3. 作为物模型管理员,我希望删除不再需要的历史快照,但系统能保护关键版本不被误删。
  4. 作为技术支持,我希望在回滚前先对比版本差异,以便确认恢复范围。
  5. 作为产品经理,我希望回滚后的流程仍然经过重新发布,而不是直接覆盖线上版本。
  6. 作为运维人员,我希望快照管理和 OTA / 告警等上下游能力形成可追溯的版本基础。

实现决策

一、模块范围

  • mortise-aiot-domain:沿用现有快照实体模型。
  • mortise-aiot-application:新增回滚、删除和生命周期规则。
  • mortise-aiot-admin:补充管理接口与权限控制。
  • admin-aiot:在现有版本历史 UI 上增加管理能力。

二、回滚策略

  • 回滚目标不是直接恢复线上版本,而是把选中的快照恢复为当前草稿。
  • 回滚后仍需用户确认并重新发布,避免无审计地覆盖线上定义。

三、生命周期规则

  • 首期支持基础删除与保护规则。
  • 对关键版本或最近版本加入删除限制,降低误操作风险。
  • 更复杂的保留策略和自动清理不在本期范围内。

四、前端策略

  • 复用现有版本历史 Modal 与 diff 结果展示。
  • 补充回滚 / 删除操作入口、确认弹窗和风险提示。
  • 不重做整个物模型详情页。

测试决策

  • 后端覆盖回滚、删除、关键版本保护和权限边界。
  • 前端覆盖回滚 / 删除交互、错误提示和 diff 辅助确认流程。
  • 至少保留一条端到端链路:查看版本历史 → 比较差异 → 回滚为草稿 → 重新进入编辑态。

垂直切片拆分

切片 1:快照回滚后端能力

覆盖的用户故事:2、5

验收标准

  • 提供回滚接口。
  • 回滚结果恢复为草稿,不直接发布。
  • 回滚后可继续编辑并重新发布。

切片 2:快照删除与生命周期规则

覆盖的用户故事:3

验收标准

  • 提供删除接口。
  • 支持基础保护规则,避免误删关键版本。

切片 3:版本历史管理 UI

覆盖的用户故事:1、2、3、4

验收标准

  • 在现有版本历史基础上增加回滚 / 删除操作。
  • 回滚前可以配合 diff 结果确认恢复范围。
  • 删除与回滚都有明确提示。

切片 4:权限与操作审计

覆盖的用户故事:6

验收标准

  • 补充快照生命周期相关权限。
  • 回滚 / 删除操作进入审计日志。

范围外

  • 设备批量导入增强
  • 快照自动清理平台化
  • 多租户快照隔离
  • 基于快照的自动兼容性评分

补充说明

这是跨仓库需求,提交后请保留本 PRD Issue 作为 Parent PRD,子仓库实现 Issue 统一引用本 Issue。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions