# 配置版本管理模块

## 概述
本模块提供了配置版本管理功能，包括Entity、Mapper、Service和Controller的完整实现。

## 文件结构
```
storlead-knowledge/
├── storlead-knowledge-core/
│   └── src/main/java/com/storlead/knowledge/
│       ├── entity/
│       │   └── ConfigVersionEntity.java          # 实体类
│       └── pojo/
│           ├── dto/
│           │   └── ConfigVersionDTO.java         # 数据传输对象
│           └── vo/
│               └── ConfigVersionVO.java          # 视图对象
├── storlead-knowledge-biz/
│   └── src/main/java/com/storlead/knowledge/
│       ├── mapper/
│       │   └── ConfigVersionMapper.java      # Mapper接口
│       └── service/impl/
│           └── ConfigVersionServiceImpl.java # Service实现类
├── storlead-knowledge-spi/
│   └── src/main/java/com/storlead/knowledge/service/
│       └── ConfigVersionService.java         # Service接口
├── storlead-knowledge-api/
│   └── src/main/java/com/storlead/knowledge/api/
│       └── ConfigVersionController.java      # Controller控制器
└── sql/
    └── config_version.sql                    # 数据库建表脚本
```

## 数据库表结构
请执行 `sql/config_version.sql` 文件中的SQL语句来创建数据库表。

表字段说明：
- `id`: 主键ID（自增）
- `name`: 名称
- `app_code`: 应用编码
- `key`: 键值
- `version`: 版本号
- `status`: 状态（0-禁用，1-启用）
- `owner_by`: 所有者ID
- `create_by`: 创建人ID
- `update_by`: 更新人ID
- `create_time`: 创建时间
- `update_time`: 更新时间
- `is_delete`: 是否删除（0-未删除，1-已删除）
- `enabled`: 是否启用（0-禁用，1-启用）
- `sort`: 排序

## 主要功能
### 基础功能
- 配置版本的增删改查
- 分页查询
- 按条件查询
- 数据验证（通过DTO）

### 扩展功能
- 根据应用编码和键值查询配置版本
- 支持关键词模糊搜索（名称、键值、版本号）
- Entity/DTO/VO之间的自动映射转换

## DTO说明
ConfigVersionDTO用于数据传输和验证：
- 包含必填字段验证（@NotBlank）
- 用于API接口的数据接收
- 通过Orika映射到Entity

## VO说明
ConfigVersionVO用于视图展示：
- 包含格式化后的时间字段
- 包含状态描述等展示用字段
- 用于API接口的数据返回

## Service层说明
ConfigVersionService提供了丰富的业务方法：
- `getByAppCodeAndKey`: 根据应用编码和键值查询最新配置版本
- `pageVO`: 分页查询并返回VO对象，支持多条件搜索
- `saveByDTO`: 通过DTO保存配置版本
- `updateByDTO`: 通过DTO更新配置版本

## API接口
### 基础CRUD接口
- GET `/knowledge/config-version/list` - 获取配置版本列表
- GET `/knowledge/config-version/page` - 分页获取配置版本列表（支持按应用编码和关键词搜索）
- GET `/knowledge/config-version/{id}` - 根据ID获取配置版本
- GET `/knowledge/config-version/by-app-key` - 根据应用编码和键值获取配置版本
- POST `/knowledge/config-version/save` - 保存配置版本
- PUT `/knowledge/config-version/update` - 更新配置版本
- DELETE `/knowledge/config-version/{id}` - 删除配置版本

### 查询参数说明
分页接口 `/knowledge/config-version/page` 支持以下参数：
- `pageIndex`: 页码（默认1）
- `pageSize`: 每页大小（默认10）
- `appCode`: 应用编码（可选）
- `keyword`: 关键词（可选，支持名称、键值、版本号模糊搜索）

## 使用方法
1. 执行SQL脚本创建数据库表
2. 确保项目依赖正确配置
3. 启动应用后即可通过API接口访问

## 测试说明
提供了完整的单元测试示例，位于：
`storlead-knowledge-biz/src/test/java/com/storlead/knowledge/service/impl/ConfigVersionServiceImplTest.java`

运行测试：
```bash
mvn test -Dtest=ConfigVersionServiceImplTest
```

## 注意事项
- 实体类继承了SysBaseField，包含了通用的字段如isDelete、createBy、updateBy、createTime、updateTime等
- 使用了MyBatis Plus进行数据访问
- 遵循了项目的分层架构规范
- 所有时间字段由框架自动填充，无需手动设置

## 使用示例
### 1. 保存配置版本
```bash
curl -X POST http://localhost:8080/knowledge/config-version/save \
  -H "Content-Type: application/json" \
  -d '{
    "name": "数据库连接配置",
    "appCode": "USER_SERVICE",
    "key": "db.connection.url",
    "version": "1.0.0",
    "status": 1
  }'
```

### 2. 分页查询配置版本
```bash
curl -X GET "http://localhost:8080/knowledge/config-version/page?pageIndex=1&pageSize=10&appCode=USER_SERVICE&keyword=database"
```

### 3. 根据应用编码和键值获取配置
```bash
curl -X GET "http://localhost:8080/knowledge/config-version/by-app-key?appCode=USER_SERVICE&key=db.connection.url"
```