Files
BoosAPI/docs/superpowers/specs/2026-06-18-workflow-ui-split-design.md
T
boos 441adcf489 docs: workflow_ui.rs 拆分(8 子模块)设计 spec
把 6181 行单文件按职责拆成 workflow_ui/ 目录 8 子模块(assets/auth/node_defs/
models/comfy_proxy/validate/queue/mod)。纯机械移动零逻辑改动,编译器+5测试验证。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 13:48:18 +08:00

3.6 KiB

workflow_ui.rs 拆分(8 子模块)设计

日期:2026-06-18 分支:feat/comfy-cloud-adapter 状态:已通过 brainstorming,待用户复审

背景

src/routes/workflow_ui.rs 单文件 6181 行,是项目最大文件,难维护/难测/edit 易错。 按职责拆成 src/routes/workflow_ui/ 模块目录(8 子模块)。纯机械移动、零逻辑改动, 靠 Rust 编译器 + 现有 5 个测试验证。

已确认决策

  1. 第一个优化目标:拆 workflow_ui.rs(项目最大文件)。
  2. 拆成 8 子模块(见下表)。
  3. 纯机械移动:函数体一字不改,只调可见性 + use 路径。零逻辑改动。
  4. 安全策略:每抽一个子模块即 cargo build -j 2 验证;5 个测试全程保持通过;末尾冒烟。

子模块划分

子模块 职责 现有行号(约)
mod.rs routes() 装配 + 共享类型(WorkflowCaller、Query/Payload structs)+ 子模块声明 56-124
assets.rs UI 静态资源服务、嵌入目录解析、index/static/serve_file/官方模板资源 211-305, 1533-1814
auth.rs caller 解析(caller_from_headers/auth_caller/caller_user_id/caller_is_admin) 313-363, 1875
node_defs.rs 节点定义 + 工作流模板(core_node_definitions、*_workflow_graph、node_type_def_to_comfy) 429-932
models.rs 模型分类 + folder 模型(is_workflow_model、workflow_folder、native_folder_models) 939-1530
comfy_proxy.rs ComfyUI API 代理 handler(settings/userdata/object_info/system_stats/extensions 等) 1883-2200
validate.rs 工作流校验(validate_workflow* 三个) 2206-2586
queue.rs 队列/历史/prompt(queue/history/queue_prompt/repair_native_prompt_payload/queue_boosapi_prompt/view) 2586-3679

注:行号是当前快照,实现时以函数名定位为准(文件会随抽取缩短)。各子模块的辅助小函数 随其主要消费者走;跨多模块共用的(如 guess_mime_from_path、parse_boolish、safe_view_path) 放 mod.rs 或新建 util.rs(实现时按实际依赖定,优先放 mod.rs 顶部 pub(super))。

安全策略(核心)

  1. 纯移动:剪切函数到子模块,函数体一字不改。仅:
    • 可见性:跨模块调用的改 pub(super) / pub(crate);
    • use:子模块顶部补齐它用到的依赖路径(crate::、super::、外部 crate)。
  2. 逐模块验证:每抽一个子模块就 cargo build -j 2。Rust 编译器对未解析引用/类型不符 直接报错——这是纯移动重构的强安全网。
  3. 测试保持:现有 5 个测试(在文件尾 #[cfg(test)] mod tests)迁到相关子模块(多与 models/node_defs 相关),全程保持通过:cargo test -p boosapi --lib routes::workflow_ui。
  4. 末尾冒烟:全部完成后,工作流 UI 打开 + 跑一个 prompt,确认行为不变。

数据流

不变。routes/mod.rs 仍 .merge(workflow_ui::routes()),对外接口零变化。仅文件内部 组织从 1 文件变 8 文件,所有路由路径、handler 行为、类型签名完全一致。

测试

  • 编译器:每步 cargo build -j 2(主验证手段)。
  • 单测:迁移后 5 个测试保持通过。
  • 冒烟:手动开工作流 UI + 跑 prompt。
  • 不新增功能测试(本任务是重构,非加功能;但若迁移中发现某函数明显缺测且易加,可顺手补)。

非目标

  • 不改任何逻辑、不改路由路径、不改 handler 行为。
  • 不拆其他巨文件(oauth.rs/digital_human.rs/user/mod.rs 各自独立后续循环)。
  • 不顺手重构/优化函数实现(纯搬运)。

提交约定

分支 feat/comfy-cloud-adapter。按子模块分多次提交(每抽 1-2 个子模块 + 编译通过即提交), 便于回溯;不一锅烩。中文 commit。