8.4 KiB
8.4 KiB
Resource Category 统一入口改造
概述
将 resource_category.rs 改造成统一入口模式,参考 template.rs 的实现,使用 execute_python_cli_command 统一执行 Python CLI 命令。
改造内容
1. Rust 端改造
新增数据结构
#[derive(Debug, Serialize, Deserialize)]
pub struct ResourceCategoryResponse {
pub success: bool,
pub message: String,
pub data: Option<serde_json::Value>,
pub output: Option<String>,
pub error: Option<String>,
}
// 各种请求结构体
pub struct CategoryListRequest { ... }
pub struct CategoryGetRequest { ... }
pub struct CategoryCreateRequest { ... }
pub struct CategoryUpdateRequest { ... }
pub struct CategoryDeleteRequest { ... }
pub struct CategorySearchRequest { ... }
pub struct CategoryColorRequest { ... }
pub struct CategoryBatchCreateRequest { ... }
统一执行函数
async fn execute_python_cli_command(
app: AppHandle,
command_args: Vec<String>,
) -> Result<ResourceCategoryResponse, String> {
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()- 停用分类
向后兼容
保留原有的命令函数,确保现有前端代码不受影响:
#[command]
pub async fn get_all_resource_categories(app: AppHandle) -> Result<String, String> {
// 原有实现保持不变
}
2. Python CLI 端实现
新增命令文件
创建 python_core/cli/commands/resource_category.py:
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 中注册:
from python_core.cli.commands.resource_category import resource_category_app
app.add_typer(resource_category_app, name="resource-category")
3. 支持的 CLI 命令
基本操作
# 获取所有分类
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
高级查询
# 搜索分类
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
状态管理
# 激活分类
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
批量操作
# 批量创建分类
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 模式
🚀 功能增强
- 支持更多的查询和过滤选项
- 批量操作支持
- 状态管理功能
- 云端分类管理
📊 统一响应格式
pub struct ResourceCategoryResponse {
pub success: bool, // 操作是否成功
pub message: String, // 操作消息
pub data: Option<Value>, // 返回数据
pub output: Option<String>, // 原始输出
pub error: Option<String>, // 错误信息
}
🎯 丰富的参数支持
每个命令都支持:
--user-id: 用户ID--verbose: 详细输出--json: JSON格式输出- 特定的业务参数
使用示例
前端调用新的 CLI 命令
// 获取所有分类
const response = await invoke<ResourceCategoryResponse>('get_all_resource_categories_cli', {
request: {
user_id: "user_123",
include_cloud: true,
limit: 50,
verbose: false,
json_output: true
}
});
// 创建分类
const createResponse = await invoke<ResourceCategoryResponse>('create_resource_category_cli', {
request: {
title: "新分类",
ai_prompt: "AI提示词",
color: "#FF0000",
is_cloud: false,
user_id: "user_123",
verbose: false,
json_output: true
}
});
直接使用 CLI
# 完整的工作流示例
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 中注册了以下新命令:
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. 渐进式迁移
// 阶段1:继续使用原有命令
const categories = await invoke<string>('get_all_resource_categories');
// 阶段2:迁移到新的 CLI 命令
const response = await invoke<ResourceCategoryResponse>('get_all_resource_categories_cli', {
request: { user_id: "user_123" }
});
2. 错误处理改进
// 新的错误处理模式
if (response.success) {
const categories = response.data;
// 处理成功结果
} else {
console.error('操作失败:', response.error);
// 处理错误
}
3. 利用新功能
// 利用新的查询功能
const colorCategories = await invoke<ResourceCategoryResponse>('get_resource_categories_by_color_cli', {
request: {
color: "#FF0000",
user_id: "user_123",
include_cloud: true
}
});
// 利用批量操作
const batchResult = await invoke<ResourceCategoryResponse>('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架构保持一致
这为后续的功能扩展和维护提供了良好的基础。