ruwebframe 0.1.3

a simple webframe for rust actix-web, based on rudi and rbatis.
Documentation
 

## `rucmd` 目录解析


`rucmd` 是项目的**命令行工具层**,提供统一的 CLI 入口,支持加密解密、配置查看、DI 代码生成、日志管理等命令行操作,并通过 DI 容器注册为全局单例。

### 文件结构


```
rucmd/
├── mod.rs                    # 模块导出
├── rucmd.rs                  # 核心命令执行器 RuCmd
├── rucmd_init.rs             # RuCmd 的 DI 注册(自动生成)
├── rucmd_test.rs             # 命令测试
└── ruframe/                  # 命令框架子模块
    ├── mod.rs
    ├── commandline.rs        # 单条命令数据结构
    ├── commandlines.rs       # 命令集合管理器
    └── commandlines_init.rs  # CommandLines 的 DI 注册(自动生成)
```

---

### 核心设计:`RuCmd` 命令执行器


[rucmd.rs](file:///E:/soft/gitee.com/ruwebframe/src/rucmd/rucmd.rs) 是整个 CLI 的核心:

```rust
pub struct RuCmd {}  // 无字段,纯方法驱动
```

实现了 `BaseEntitySingle`(单例模式),全局只有一个实例。

---

### 支持的命令一览


通过 `execute(args)` 方法统一路由,根据 `args[1]` 匹配:

| 命令 | 子命令 | 功能 | 调用的方法 |
|------|--------|------|-----------|
| `enc <text>` || **加密文本**(AES-256-GCM) | `enc()``ruenc::enc()` |
| `dec <text>` || **解密文本** | `dec()``ruenc::dec()` |
| `cfg` || 查看完整配置(JSON) | `list_config()` |
| `cfg env` || 查看 software 配置 | `list_config()` |
| `cfg db` || 查看 datasource 配置 | `list_config()` |
| `cfg redis` || 查看 Redis 配置 | `list_config()` |
| `cfg web` || 查看 Web 配置 | `list_config()` |
| `rudi list` || **列出所有结构体** | `rudi()``difactroy::list_di()` |
| `rudi all` || **为所有结构体生成 DI 注入代码** | `rudi()``difactroy::make_di()` |
| `rudi <name>` || 为指定结构体生成 DI 代码 | `rudi()``difactroy::make_di_one()` |
| `version` / `v` || 显示版本号 | `version()` |
| `help` / `h` || 显示帮助信息 | `help()` |
| `inst` / `i` | `cmd/data/config/web/all` | 安装依赖(预留) | `inst()` |
| `list` | `<dir>` | 列出指定目录日志文件 | `list_log()` |

---

### 命令路由机制


```rust
pub fn execute(&self, args: &Vec<String>) {
    if args.len() >= 2 {
        match args[1].as_str() {
            "enc"     => self.enc(&args),
            "dec"     => self.dec(&args),
            "cfg"     => self.list_config(&args),
            "rudi"    => self.rudi(&args),
            "version" | "v" => self.version(),
            "h" | "help"    => self.help(),
            "i" | "inst"    => self.inst(&args),
            "list"    => self.list_log(args),
            _ => {}  // 未知命令静默忽略
        }
    }
}
```

设计简洁:`args[0]` 是程序名,`args[1]` 是主命令,`args[2..]` 是子命令/参数。

---

### 关键功能详解


#### 1. 加密解密(`enc` / `dec`

```rust
pub fn enc(&self, args: &Vec<String>) {
    let result = ruenc::find_bean_ruenc().unwrap().enc(&args[2]);
    println!("{}", result);
}
```

直接委托给 `ruenc` 模块的 AES-256-GCM 加解密,用于敏感配置字段的加密存储。

#### 2. 配置查看(`cfg`

支持按模块查看配置:
- `cfg` → 全部配置 JSON
- `cfg env``software` 配置
- `cfg db``datasource` 配置
- `cfg redis``redis` 配置
- `cfg web``web` 配置

#### 3. DI 代码生成(`rudi`

这是最核心的自动化能力:
- `rudi list` → 列出所有可自动注入的结构体
- `rudi all` → 批量为所有结构体生成 `*_init.rs` DI 注册代码
- `rudi <name>` → 为指定结构体生成

依赖于 `difactroy`(DI 工厂)模块。

#### 4. 日志文件查看(`list`

```rust
fn list_log(&self, args: &Vec<String>) {
    let mut dto = FileDto::new();
    if args.len() >= 2 {
        dto.set_dir(args[2].as_str().to_string());
    }
    let files = fileutils::list_files(&dto);
    // ...
}
```

---

### `ruframe` 子模块 — 命令框架(预留)


这是一个**可扩展的命令注册框架**,目前处于早期阶段:

| 文件 | 说明 |
|------|------|
| [commandline.rs]file:///E:/soft/gitee.com/ruwebframe/src/rucmd/ruframe/commandline.rs | 单条命令的数据结构:`cmd`(命令名)、`args`(参数)、`cmdHelp`(帮助文本) |
| [commandlines.rs]file:///E:/soft/gitee.com/ruwebframe/src/rucmd/ruframe/commandlines.rs | 命令集合管理器:`Vec<CommandLine>``Mutex` 包裹,提供 `reg()` 注册方法 |
| [commandlines_init.rs]file:///E:/soft/gitee.com/ruwebframe/src/rucmd/ruframe/commandlines_init.rs | DI 注册(多例模式) |

设计意图是让命令可动态注册,但 `CommandLine` 中的 `cmdFn` 字段被注释掉了,`reg()` 方法也只是 push 了一个默认值,说明这个可扩展框架还在开发中。

---

### DI 注册


```rust
// RuCmd: 单例模式
direg::register_singleton(SINGLE_BEAN_NAME, RuCmd::default);

// CommandLines: 多例模式
direg::register(SINGLE_BEAN_NAME, CommandLines::default);
```

获取方式:`rucmd::find_bean_rucmd().unwrap()`

---

### 架构定位


```
┌──────────────────────────────────────────────────┐
│                    rucmd (CLI 层)                  │
│                                                    │
│  ┌──────────┐     ┌──────────────────────────┐    │
│  │  RuCmd   │────→│ execute(args) 命令路由     │    │
│  │ (单例)    │     │                          │    │
│  └──────────┘     │ enc/dec → ruenc          │    │
│                    │ cfg     → rucfg          │    │
│                    │ rudi    → difactroy      │    │
│                    │ list    → fileutils      │    │
│                    └──────────────────────────┘    │
│                                                    │
│  ┌──────────────────────────────────────────┐    │
│  │  ruframe (命令框架 - 预留)                  │    │
│  │  CommandLine / CommandLines               │    │
│  │  → 可扩展的动态命令注册                     │    │
│  └──────────────────────────────────────────┘    │
└──────────────┬───────────────────────────────────┘
               │ 依赖
    ┌──────────┼──────────┬───────────┐
    ▼          ▼          ▼           ▼
┌──────┐ ┌──────┐ ┌──────────┐ ┌──────────┐
│ruenc │ │rucfg │ │difactroy │ │ fileutils│
│加密解密│ │配置  │ │DI工厂     │ │ 文件工具  │
└──────┘ └──────┘ └──────────┘ └──────────┘
```

---

### 使用示例


```bash
# 加密密码

rucmd enc "my_secret_password"

# 解密

rucmd dec "base64_encoded_ciphertext"

# 查看当前配置

rucmd cfg
rucmd cfg db
rucmd cfg redis

# 生成 DI 代码

rucmd rudi list        # 查看所有结构体
rucmd rudi all         # 批量生成
rucmd rudi Person      # 单独生成

# 查看日志

rucmd list ./logs

# 帮助

rucmd help
```

**总结**:`rucmd` 是项目的 CLI 工具集,将加密解密、配置查看、DI 代码生成、日志管理等运维操作统一封装为命令行,通过 `execute()` 方法实现简单路由,各功能委托给对应底层模块执行。`ruframe` 子模块预留了可扩展的命令注册框架,为未来动态添加命令提供了基础。