# Resource Category 统一入口改造 ## 概述 将 `resource_category.rs` 改造成统一入口模式,参考 `template.rs` 的实现,使用 `execute_python_cli_command` 统一执行 Python CLI 命令。 ## 改造内容 ### 1. Rust 端改造 #### 新增数据结构 ```rust #[derive(Debug, Serialize, Deserialize)] pub struct ResourceCategoryResponse { pub success: bool, pub message: String, pub data: Option, pub output: Option, pub error: Option, } // 各种请求结构体 pub struct CategoryListRequest { ... } pub struct CategoryGetRequest { ... } pub struct CategoryCreateRequest { ... } pub struct CategoryUpdateRequest { ... } pub struct CategoryDeleteRequest { ... } pub struct CategorySearchRequest { ... } pub struct CategoryColorRequest { ... } pub struct CategoryBatchCreateRequest { ... } ``` #### 统一执行函数 ```rust async fn execute_python_cli_command( app: AppHandle, command_args: Vec, ) -> Result { let mut args = vec!["-m".to_string(), "python_core.cli".to_string()]; args.extend(command_args); match execute_python_command(app, &args, None).await { Ok(output) => { // 解析JSON响应或返回文本输出 } Err(error) => { // 返回错误响应 } } } ``` #### 新增 CLI 命令 - `get_all_resource_categories_cli()` - 获取所有分类 - `get_resource_category_by_id_cli()` - 根据ID获取分类 - `create_resource_category_cli()` - 创建分类 - `update_resource_category_cli()` - 更新分类 - `delete_resource_category_cli()` - 删除分类 - `search_resource_categories_cli()` - 搜索分类 - `get_resource_categories_by_color_cli()` - 按颜色获取分类 - `get_cloud_resource_categories_cli()` - 获取云端分类 - `batch_create_resource_categories_cli()` - 批量创建分类 - `get_resource_category_count_cli()` - 获取分类数量 - `activate_resource_category_cli()` - 激活分类 - `deactivate_resource_category_cli()` - 停用分类 #### 向后兼容 保留原有的命令函数,确保现有前端代码不受影响: ```rust #[command] pub async fn get_all_resource_categories(app: AppHandle) -> Result { // 原有实现保持不变 } ``` ### 2. Python CLI 端实现 #### 新增命令文件 创建 `python_core/cli/commands/resource_category.py`: ```python resource_category_app = typer.Typer(help="素材分类管理命令") @resource_category_app.command("list") def list_categories(...): """获取所有素材分类""" @resource_category_app.command("get") def get_category(...): """根据ID获取素材分类""" @resource_category_app.command("create") def create_category(...): """创建新的素材分类""" # ... 其他命令 ``` #### 注册到主 CLI 在 `python_core/cli/cli.py` 中注册: ```python from python_core.cli.commands.resource_category import resource_category_app app.add_typer(resource_category_app, name="resource-category") ``` ### 3. 支持的 CLI 命令 #### 基本操作 ```bash # 获取所有分类 python -m python_core.cli resource-category list --user-id USER_ID # 根据ID获取分类 python -m python_core.cli resource-category get CATEGORY_ID --user-id USER_ID # 创建分类 python -m python_core.cli resource-category create "分类名称" \ --ai-prompt "AI提示词" --color "#FF0000" --user-id USER_ID # 更新分类 python -m python_core.cli resource-category update CATEGORY_ID \ --title "新标题" --color "#00FF00" --user-id USER_ID # 删除分类 python -m python_core.cli resource-category delete CATEGORY_ID \ --hard-delete --user-id USER_ID ``` #### 高级查询 ```bash # 搜索分类 python -m python_core.cli resource-category search "关键词" --user-id USER_ID # 按颜色获取分类 python -m python_core.cli resource-category by-color "#FF0000" --user-id USER_ID # 获取云端分类 python -m python_core.cli resource-category cloud --limit 50 # 获取分类数量 python -m python_core.cli resource-category count --user-id USER_ID ``` #### 状态管理 ```bash # 激活分类 python -m python_core.cli resource-category activate CATEGORY_ID --user-id USER_ID # 停用分类 python -m python_core.cli resource-category deactivate CATEGORY_ID --user-id USER_ID ``` #### 批量操作 ```bash # 批量创建分类 python -m python_core.cli resource-category batch-create \ --data '[{"title":"分类1","color":"#FF0000"},{"title":"分类2","color":"#00FF00"}]' \ --user-id USER_ID ``` ## 主要特点 ### 🔄 **统一模式** - 所有新命令都使用 `execute_python_cli_command` 模式 - 统一的错误处理和响应格式 - 与 `template.rs` 保持一致的架构 ### 🔗 **向后兼容** - 保留所有原有的命令函数 - 现有前端代码无需修改 - 渐进式迁移到新的 CLI 模式 ### 🚀 **功能增强** - 支持更多的查询和过滤选项 - 批量操作支持 - 状态管理功能 - 云端分类管理 ### 📊 **统一响应格式** ```rust pub struct ResourceCategoryResponse { pub success: bool, // 操作是否成功 pub message: String, // 操作消息 pub data: Option, // 返回数据 pub output: Option, // 原始输出 pub error: Option, // 错误信息 } ``` ### 🎯 **丰富的参数支持** 每个命令都支持: - `--user-id`: 用户ID - `--verbose`: 详细输出 - `--json`: JSON格式输出 - 特定的业务参数 ## 使用示例 ### 前端调用新的 CLI 命令 ```typescript // 获取所有分类 const response = await invoke('get_all_resource_categories_cli', { request: { user_id: "user_123", include_cloud: true, limit: 50, verbose: false, json_output: true } }); // 创建分类 const createResponse = await invoke('create_resource_category_cli', { request: { title: "新分类", ai_prompt: "AI提示词", color: "#FF0000", is_cloud: false, user_id: "user_123", verbose: false, json_output: true } }); ``` ### 直接使用 CLI ```bash # 完整的工作流示例 python -m python_core.cli resource-category create "视频素材" \ --ai-prompt "用于识别视频文件" \ --color "#FF6B6B" \ --user-id "demo_user" python -m python_core.cli resource-category list --user-id "demo_user" python -m python_core.cli resource-category search "视频" --user-id "demo_user" ``` ## 注册的 Tauri 命令 在 `lib.rs` 中注册了以下新命令: ```rust commands::get_all_resource_categories_cli, commands::get_resource_category_by_id_cli, commands::create_resource_category_cli, commands::update_resource_category_cli, commands::delete_resource_category_cli, commands::search_resource_categories_cli, commands::get_resource_categories_by_color_cli, commands::get_cloud_resource_categories_cli, commands::batch_create_resource_categories_cli, commands::get_resource_category_count_cli, commands::activate_resource_category_cli, commands::deactivate_resource_category_cli, ``` ## 迁移建议 ### 1. 渐进式迁移 ```typescript // 阶段1:继续使用原有命令 const categories = await invoke('get_all_resource_categories'); // 阶段2:迁移到新的 CLI 命令 const response = await invoke('get_all_resource_categories_cli', { request: { user_id: "user_123" } }); ``` ### 2. 错误处理改进 ```typescript // 新的错误处理模式 if (response.success) { const categories = response.data; // 处理成功结果 } else { console.error('操作失败:', response.error); // 处理错误 } ``` ### 3. 利用新功能 ```typescript // 利用新的查询功能 const colorCategories = await invoke('get_resource_categories_by_color_cli', { request: { color: "#FF0000", user_id: "user_123", include_cloud: true } }); // 利用批量操作 const batchResult = await invoke('batch_create_resource_categories_cli', { request: { categories: [ { title: "分类1", color: "#FF0000" }, { title: "分类2", color: "#00FF00" } ], user_id: "user_123" } }); ``` ## 总结 通过这次改造,`resource_category.rs` 现在: - ✅ 使用统一的 CLI 执行模式 - ✅ 保持向后兼容性 - ✅ 提供丰富的功能和参数选项 - ✅ 支持批量操作和高级查询 - ✅ 统一的错误处理和响应格式 - ✅ 与 `template.rs` 架构保持一致 这为后续的功能扩展和维护提供了良好的基础。