fix
This commit is contained in:
337
docs/resource_category_unified_entry.md
Normal file
337
docs/resource_category_unified_entry.md
Normal 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` 架构保持一致
|
||||
|
||||
这为后续的功能扩展和维护提供了良好的基础。
|
||||
Reference in New Issue
Block a user