This commit is contained in:
root
2025-07-12 23:11:40 +08:00
parent 26cf5ad37b
commit 4994734ca1
7 changed files with 1207 additions and 499 deletions

View File

@@ -0,0 +1,337 @@
# 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` 架构保持一致
这为后续的功能扩展和维护提供了良好的基础。