mxivideo/docs/resource_category_unified_e...

8.4 KiB
Raw Permalink Blame History

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 架构保持一致

这为后续的功能扩展和维护提供了良好的基础。