You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.6 KiB
4.6 KiB
11 — Bruno 示例落地:商机+规则族接口示例刷新
Type: task Status: resolved Blocked by: 06, 05
Question
按票 06 的机制结论 + seed-data-manifest.md 的真实数据,把 D:/code/crm-api-docs 中商机模块 + 商机规则族全部接口的请求示例替换为真实测试数据:
- 每个接口:query / body 示例值 = seed 真实值(真实商机 id、真实字典 code、真实分页参数),响应示例同步补关键回显(若格式支持);
- 商机模块范围:列表 / 详情 / 子表族 / 流转操作 / convertible-leads;规则族范围:阶段模板 / 方案卡模板 / 公海规则全接口;
- 已知缺口(票 01 核实 20260828):规则族 25 端点(
/api/rule/opp-stage-template|opp-scheme-template|opp-pool-rule)当前在集合里无对应 folder——执行时先确认票 06 结论:bruno-sync 是否覆盖 crm-rule 源码;若不覆盖需扩 config 后再生,再注示例;自定义视图 4 端点(/api/preference/view/list|save|delete|set-default,票 04 新增 F15 核实 20260828)同样不在 Bruno 集合,一并补齐; - 顺序按票 06 结论定(先 sync 后注示例 or 反之),改完跑一次
/bruno-sync验证示例不丢; - 验收口:用户在 Bruno 里点开任一商机接口,即可照抄发起真实请求拿到真实响应。
产出:更新后的集合 + 在 research-bruno-examples.md 补一段执行记录。
Answer
已解决(20260828)。执行口径:不猜值,全部以 specimens.json 32 个实测标本为数据源(含 8080 补采 stage_versions/scheme_versions)。
产出
- 存量 48 请求示例注入(
inject-examples.py):48 个既有 .bru 的实参块 + docs「请求示例」段换成 seed 真实值(viewType/current/size/keyword、真实商机 id、字典 code)。 - 规则族 25 + 自定义视图 4 新入集合(
gen-rules-views.py):29 接口 .bru + 4 folder.bru,落 4 个新目录树(商机管理/商机规则/{公海规则,阶段模板,方案卡模板}、销售机会/自定义视图),folder seq 取同父 max+10;真实值来自标本(POOL_ID=748507245062389760、SCHEME_ID=748508098259320832、STAGE_ID=747831302652166144、VIEW_ID=e7b9595f7ea54641b093e9d6bfb096f9——32 位 hex 非雪花,handoff 初稿有误以标本为准)。 - 商机模块接口文件总数 77 = 71 唯一钥匙 + page/board-cards/board-stage-summary 3 接口 × 3 页面副本多 6 文件。
- 幂等验证:gen 重跑 33 skipped;
--force重写限 OWN_DIRS 白名单防误伤;全仓 209 个 .bru 0 BOM。
对账结论(verify_sync.py)
源码侧扫 12 控制器(crm-opportunity 8 + crm-rule 3 商机控制器 + SavedViewController)提 @(Get|Post)Mapping,与文件侧 docs 首行钥匙三向对比:71 唯一钥匙全命中、双零差集。⚠ 正则勘误:@PostMapping 无参形态(OpportunityCreateController 新建商机,端点=类级 base)初版漏扫,已修正为可选路径组。结论:sync 若重跑,结构已镜像源码 → 全部「不动」;实参值与示例在 docs 块属表述(SKILL 铁律 1)→ 不会丢。
新契约事实(本次实测沉淀)
- board 两端点源码无 viewType 参数(OpportunityCollabController:stage-summary 只收 stageTemplateId、cards 只收 stageId/offset/limit)——e2e 发的 viewType 被 Spring 静默忽略 = D-20「公海看板未过滤」根因;.bru 参数表本来就对。
- scopeKey 实测值=
opportunity(seed/demo/e2e 全用此值);⚠OpportunityViewQueryImpl内部常量SAVED_VIEW_SCOPE="opportunity.sales"与前端写入 scope 不一致——列表页 savedViewId 叠加可能读不到已保存视图,疑似新缺陷候选,未实测。 - view/save 是 viewId upsert(空=新建非空=覆盖编辑);删除/设默认走 form
scopeKey&viewId。 - nodes/fields 索引式表单绑定(
nodes[0].stageDictCode=…,e2e-rules R02/R03 实测通过);deptIds 逗号分隔字符串。 - publish 自我顶替(同 code 发布中新版顶旧版);阶段模板末位固定节点 OPP_STAGE_05 系统保证、入参不可伪造。
Result<Void>data=null 非失败(删除/设默认等写操作)。- versions 实体直出泄露 creatorId/updaterId/deleted(违 ADR-0017,D-19 在 stage/scheme versions 补采中同样坐实)。
验收口
Bruno 里点开任一商机接口,实参块即 seed 真实值(起服见 map.md 环境;debug token userId=739564171091247104),照抄即可发真实请求拿真实响应。详见 research-bruno-examples.md 执行记录段 + specimens.json。