# 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<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 { ... }
```

#### 统一执行函数

```rust
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()` - 停用分类

#### 向后兼容

保留原有的命令函数，确保现有前端代码不受影响：

```rust
#[command]
pub async fn get_all_resource_categories(app: AppHandle) -> Result<String, String> {
    // 原有实现保持不变
}
```

### 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<Value>,  // 返回数据
    pub output: Option<String>, // 原始输出
    pub error: Option<String>,  // 错误信息
}
```

### 🎯 **丰富的参数支持**

每个命令都支持：
- `--user-id`: 用户ID
- `--verbose`: 详细输出
- `--json`: JSON格式输出
- 特定的业务参数

## 使用示例

### 前端调用新的 CLI 命令

```typescript
// 获取所有分类
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

```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<string>('get_all_resource_categories');

// 阶段2：迁移到新的 CLI 命令
const response = await invoke<ResourceCategoryResponse>('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<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` 架构保持一致

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