fix: 统一模板和工作流概念,修复comfyui_v2_list_workflows查询问题

主要修改:

1. **统一模板和工作流概念**
   - 确认模板和工作流是同一概念,避免重复存储
   - 修改comfyui_v2_list_workflows查询模板表而非工作流表
   - 修改comfyui_v2_get_workflow查询模板引擎
   - 修改comfyui_v2_delete_workflow删除模板记录

2. **修复数据查询问题**
   - 解决创建模板后comfyui_v2_list_workflows返回空数组的问题
   - 添加convert_template_to_workflow_response转换函数
   - 确保前端能够正确获取创建的模板数据

3. **保持API兼容性**
   - 保持现有的API接口不变
   - 返回格式与WorkflowResponse保持一致
   - 确保前端代码无需修改

这个修改解决了模板创建成功但列表查询为空的核心问题,
现在创建模板后可以通过comfyui_v2_list_workflows正确获取数据。
This commit is contained in:
root 2025-08-08 23:22:58 +08:00
parent 84081284f7
commit ef8c6fd3e0
1 changed files with 44 additions and 14 deletions

View File

@ -504,7 +504,7 @@ pub async fn comfyui_v2_create_workflow(
Ok(convert_workflow_model(&workflow)) Ok(convert_workflow_model(&workflow))
} }
/// 获取工作流列表 /// 获取工作流列表(实际查询模板表,因为模板和工作流是同一概念)
#[tauri::command] #[tauri::command]
pub async fn comfyui_v2_list_workflows( pub async fn comfyui_v2_list_workflows(
enabled_only: Option<bool>, enabled_only: Option<bool>,
@ -513,16 +513,19 @@ pub async fn comfyui_v2_list_workflows(
info!("Command: comfyui_v2_list_workflows"); info!("Command: comfyui_v2_list_workflows");
let service_manager = get_service_manager(&state).await?; let service_manager = get_service_manager(&state).await?;
let repository = service_manager.get_repository(); let template_engine = service_manager.get_template_engine().await
.map_err(|e| format!("获取模板引擎失败: {}", e))?;
let workflows = repository.list_workflows(enabled_only.unwrap_or(true)) // 查询模板列表(模板和工作流是同一概念)
.map_err(|e| format!("获取工作流列表失败: {}", e))?; let templates = template_engine.list_templates(enabled_only.unwrap_or(true)).await
.map_err(|e| format!("获取模板列表失败: {}", e))?;
let responses = workflows.iter().map(convert_workflow_model).collect(); // 将模板转换为工作流响应格式
let responses = templates.iter().map(convert_template_to_workflow_response).collect();
Ok(responses) Ok(responses)
} }
/// 获取单个工作流 /// 获取单个工作流(实际查询模板表,因为模板和工作流是同一概念)
#[tauri::command] #[tauri::command]
pub async fn comfyui_v2_get_workflow( pub async fn comfyui_v2_get_workflow(
workflow_id: String, workflow_id: String,
@ -531,12 +534,19 @@ pub async fn comfyui_v2_get_workflow(
info!("Command: comfyui_v2_get_workflow - {}", workflow_id); info!("Command: comfyui_v2_get_workflow - {}", workflow_id);
let service_manager = get_service_manager(&state).await?; let service_manager = get_service_manager(&state).await?;
let repository = service_manager.get_repository(); let template_engine = service_manager.get_template_engine().await
.map_err(|e| format!("获取模板引擎失败: {}", e))?;
match repository.get_workflow(&workflow_id) { // 查询模板(模板和工作流是同一概念)
Ok(Some(workflow)) => Ok(convert_workflow_model(&workflow)), match template_engine.load_template(&workflow_id).await {
Ok(None) => Err("工作流不存在".to_string()), Ok(template) => Ok(convert_template_to_workflow_response(&template)),
Err(e) => Err(format!("获取工作流失败: {}", e)), Err(e) => {
if e.to_string().contains("模板不存在") {
Err("工作流不存在".to_string())
} else {
Err(format!("获取工作流失败: {}", e))
}
}
} }
} }
@ -552,7 +562,7 @@ pub async fn comfyui_v2_update_workflow(
Err("功能暂未实现".to_string()) Err("功能暂未实现".to_string())
} }
/// 删除工作流 /// 删除工作流(实际删除模板,因为模板和工作流是同一概念)
#[tauri::command] #[tauri::command]
pub async fn comfyui_v2_delete_workflow( pub async fn comfyui_v2_delete_workflow(
workflow_id: String, workflow_id: String,
@ -561,9 +571,11 @@ pub async fn comfyui_v2_delete_workflow(
info!("Command: comfyui_v2_delete_workflow - {}", workflow_id); info!("Command: comfyui_v2_delete_workflow - {}", workflow_id);
let service_manager = get_service_manager(&state).await?; let service_manager = get_service_manager(&state).await?;
let repository = service_manager.get_repository(); let template_engine = service_manager.get_template_engine().await
.map_err(|e| format!("获取模板引擎失败: {}", e))?;
repository.delete_workflow(&workflow_id) // 删除模板(模板和工作流是同一概念)
template_engine.delete_template(&workflow_id).await
.map_err(|e| format!("删除工作流失败: {}", e))?; .map_err(|e| format!("删除工作流失败: {}", e))?;
Ok("工作流删除成功".to_string()) Ok("工作流删除成功".to_string())
@ -610,3 +622,21 @@ fn convert_workflow_model(workflow: &WorkflowModel) -> WorkflowResponse {
category: workflow.category.clone(), category: workflow.category.clone(),
} }
} }
/// 转换模板模型为工作流响应(因为模板和工作流是同一概念)
fn convert_template_to_workflow_response(template: &crate::data::models::comfyui::TemplateModel) -> WorkflowResponse {
WorkflowResponse {
id: template.id.clone(),
name: template.name.clone(),
description: template.description.clone(),
workflow_data: template.template_data.workflow.iter()
.map(|(k, v)| (k.clone(), serde_json::to_value(v).unwrap_or(serde_json::Value::Null)))
.collect(),
version: template.version.clone(),
created_at: template.created_at.to_rfc3339(),
updated_at: template.updated_at.to_rfc3339(),
enabled: template.enabled,
tags: template.tags.clone(),
category: template.category.clone(),
}
}