datai/datai-scenes/datai-scene-salesforce/docs/api-docs/2026-02-05-002-04-api.md

395 lines
11 KiB
Markdown
Raw Permalink Normal View History

# API 文档 - 代码覆盖率功能
## 元数据
- 需求编号002-04
- 需求名称:代码覆盖率
- 创建时间2026-02-05
- 创建人AI Assistant
- 版本v2.0.0
- 状态:已完成
## API 概述
代码覆盖率功能 API 提供了 Salesforce Apex 代码覆盖率的查询、统计和分析能力。通过这组 API用户可以
- 分页查询代码覆盖率列表,支持多条件筛选
- 查询单个代码覆盖率记录的详细信息
- 获取指定测试结果的总体代码覆盖率统计
- 按类型Class/Trigger统计代码覆盖率
所有 API 均遵循 RESTful 设计规范返回统一的结果格式ResultVo支持权限控制独立权限标识 `apex:coverage:query`)。
## 接口列表
### 接口 1查询代码覆盖率列表
#### 功能描述
分页查询代码覆盖率列表,支持按测试结果 ID、类/触发器名称、类型、命名空间、覆盖率范围等多条件筛选。
#### 请求方式
POST
#### 请求路径
`/api/salesforce/apex/coverage/list`
#### 权限标识
`apex:coverage:query`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| testResultId | Long | 是 | 测试结果 ID关联 datai_apex_test_result 表 |
| name | String | 否 | 类/触发器名称,支持模糊查询,长度 1-255 字符 |
| type | String | 否 | 类型可选值Class、Trigger |
| namespace | String | 否 | 命名空间,支持模糊查询,长度 1-255 字符 |
| minCoverage | Double | 否 | 最小覆盖率0.0-100.0 |
| maxCoverage | Double | 否 | 最大覆盖率0.0-100.0 |
| pageNum | Integer | 否 | 页码,默认 1最小 1 |
| pageSize | Integer | 否 | 每页大小,默认 10范围 1-100 |
#### 响应参数
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 分页结果数据 |
| data.total | Long | 总记录数 |
| data.rows | Array | 代码覆盖率记录列表 |
| data.rows[].id | Long | 记录 ID |
| data.rows[].testResultId | Long | 测试结果 ID |
| data.rows[].name | String | 类/触发器名称 |
| data.rows[].type | String | 类型Class/Trigger |
| data.rows[].namespace | String | 命名空间 |
| data.rows[].numLocations | Integer | 总代码行数 |
| data.rows[].numLocationsNotCovered | Integer | 未覆盖代码行数 |
| data.rows[].coveragePercent | Double | 覆盖率百分比0.00-100.00 |
#### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"total": 15,
"rows": [
{
"id": 1,
"testResultId": 100,
"name": "AccountController",
"type": "Class",
"namespace": "MyNamespace",
"numLocations": 100,
"numLocationsNotCovered": 20,
"coveragePercent": 80.00
},
{
"id": 2,
"testResultId": 100,
"name": "ContactTrigger",
"type": "Trigger",
"namespace": "MyNamespace",
"numLocations": 50,
"numLocationsNotCovered": 5,
"coveragePercent": 90.00
}
]
}
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "testResultId 不能为空"
}
```
#### 错误码
- 200操作成功
- 500服务器内部错误testResultId 不能为空、参数验证失败等)
---
### 接口 2查询代码覆盖率详情
#### 功能描述
根据 ID 查询单个代码覆盖率记录的详细信息。
#### 请求方式
GET
#### 请求路径
`/api/salesforce/apex/coverage/{id}`
#### 权限标识
`apex:coverage:query`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| id | Long | 是 | 代码覆盖率记录 ID路径参数最小 1 |
#### 响应参数
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 代码覆盖率详情数据 |
| data.id | Long | 记录 ID |
| data.testResultId | Long | 测试结果 ID |
| data.name | String | 类/触发器名称 |
| data.type | String | 类型Class/Trigger |
| data.namespace | String | 命名空间 |
| data.numLocations | Integer | 总代码行数 |
| data.numLocationsNotCovered | Integer | 未覆盖代码行数 |
| data.coveragePercent | Double | 覆盖率百分比0.00-100.00 |
#### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"id": 1,
"testResultId": 100,
"name": "AccountController",
"type": "Class",
"namespace": "MyNamespace",
"numLocations": 100,
"numLocationsNotCovered": 20,
"coveragePercent": 80.00
}
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "代码覆盖率记录不存在"
}
```
#### 错误码
- 200操作成功
- 500服务器内部错误代码覆盖率记录不存在、参数验证失败等
---
### 接口 3查询总体代码覆盖率统计
#### 功能描述
统计指定测试结果的总体代码覆盖率,包括加权平均覆盖率、总代码行数、未覆盖代码行数、已覆盖代码行数。
#### 请求方式
POST
#### 请求路径
`/api/salesforce/apex/coverage/summary`
#### 权限标识
`apex:coverage:query`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| testResultId | Long | 是 | 测试结果 ID关联 datai_apex_test_result 表 |
#### 响应参数
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 覆盖率统计数据 |
| data.testResultId | Long | 测试结果 ID |
| data.totalClasses | Integer | 总类/触发器数量 |
| data.totalLines | Integer | 总代码行数 |
| data.coveredLines | Integer | 已覆盖代码行数 |
| data.uncoveredLines | Integer | 未覆盖代码行数 |
| data.averageCoverage | Double | 加权平均覆盖率百分比0.00-100.00 |
#### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"testResultId": 100,
"totalClasses": 15,
"totalLines": 1500,
"coveredLines": 1200,
"uncoveredLines": 300,
"averageCoverage": 80.00
}
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "testResultId 不能为空"
}
```
#### 错误码
- 200操作成功
- 500服务器内部错误testResultId 不能为空、参数验证失败等)
---
### 接口 4按类型统计代码覆盖率
#### 功能描述
按类型Class/Trigger统计代码覆盖率返回每种类型的覆盖率统计信息。
#### 请求方式
POST
#### 请求路径
`/api/salesforce/apex/coverage/summary-by-type`
#### 权限标识
`apex:coverage:query`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| testResultId | Long | 是 | 测试结果 ID关联 datai_apex_test_result 表 |
#### 响应参数
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码200 成功,其他失败) |
| msg | String | 提示信息 |
| data | Object | 按类型统计的覆盖率数据 |
| data.testResultId | Long | 测试结果 ID |
| data.typeSummaries | Array | 类型统计列表 |
| data.typeSummaries[].type | String | 类型Class/Trigger |
| data.typeSummaries[].totalClasses | Integer | 该类型的类/触发器数量 |
| data.typeSummaries[].totalLines | Integer | 该类型的总代码行数 |
| data.typeSummaries[].coveredLines | Integer | 该类型的已覆盖代码行数 |
| data.typeSummaries[].uncoveredLines | Integer | 该类型的未覆盖代码行数 |
| data.typeSummaries[].averageCoverage | Double | 该类型的加权平均覆盖率百分比0.00-100.00 |
#### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"testResultId": 100,
"typeSummaries": [
{
"type": "Class",
"totalClasses": 10,
"totalLines": 1000,
"coveredLines": 850,
"uncoveredLines": 150,
"averageCoverage": 85.00
},
{
"type": "Trigger",
"totalClasses": 5,
"totalLines": 500,
"coveredLines": 350,
"uncoveredLines": 150,
"averageCoverage": 70.00
}
]
}
}
```
#### 失败示例
```json
{
"code": 500,
"msg": "testResultId 不能为空"
}
```
#### 错误码
- 200操作成功
- 500服务器内部错误testResultId 不能为空、参数验证失败等)
## 错误码
### 通用错误码
| 错误码 | 说明 | 处理建议 |
|--------|------|----------|
| 200 | 操作成功 | 无需处理 |
| 401 | 未授权 | 检查用户是否登录Token 是否有效 |
| 403 | 权限不足 | 检查用户是否具有 `apex:coverage:query` 权限 |
| 404 | 资源不存在 | 检查请求路径是否正确 |
| 500 | 服务器内部错误 | 查看服务器日志,排查具体错误原因 |
### 业务错误码
| 错误码 | 说明 | 处理建议 |
|--------|------|----------|
| 500 | testResultId 不能为空 | 确保请求参数中包含 testResultId |
| 500 | 代码覆盖率记录不存在 | 检查 id 参数是否正确,记录是否已删除 |
| 500 | 参数验证失败 | 检查请求参数是否符合要求(如类型、范围等) |
## 数据模型
### QueryCodeCoverageDto查询代码覆盖率请求
| 字段名 | 类型 | 说明 |
|--------|------|------|
| testResultId | Long | 测试结果 ID |
| name | String | 类/触发器名称 |
| type | String | 类型Class/Trigger |
| namespace | String | 命名空间 |
| minCoverage | Double | 最小覆盖率 |
| maxCoverage | Double | 最大覆盖率 |
| pageNum | Integer | 页码 |
| pageSize | Integer | 每页大小 |
### CodeCoverageResultVo代码覆盖率结果
| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | Long | 记录 ID |
| testResultId | Long | 测试结果 ID |
| name | String | 类/触发器名称 |
| type | String | 类型Class/Trigger |
| namespace | String | 命名空间 |
| numLocations | Integer | 总代码行数 |
| numLocationsNotCovered | Integer | 未覆盖代码行数 |
| coveragePercent | Double | 覆盖率百分比 |
### CodeCoverageSummaryVo代码覆盖率统计
| 字段名 | 类型 | 说明 |
|--------|------|------|
| testResultId | Long | 测试结果 ID |
| totalClasses | Integer | 总类/触发器数量 |
| totalLines | Integer | 总代码行数 |
| coveredLines | Integer | 已覆盖代码行数 |
| uncoveredLines | Integer | 未覆盖代码行数 |
| averageCoverage | Double | 加权平均覆盖率 |
### CoverageTypeSummaryVo按类型统计
| 字段名 | 类型 | 说明 |
|--------|------|------|
| type | String | 类型Class/Trigger |
| totalClasses | Integer | 该类型的类/触发器数量 |
| totalLines | Integer | 该类型的总代码行数 |
| coveredLines | Integer | 该类型的已覆盖代码行数 |
| uncoveredLines | Integer | 该类型的未覆盖代码行数 |
| averageCoverage | Double | 该类型的加权平均覆盖率 |
## 相关文档
- [需求文档](../requirements/sub/2026-01-28-002-04-代码覆盖率.md)
- [设计文档](../design/2026-02-03-002-04-代码覆盖率-设计.md)
- [决策记录](../decisions/2026-02-03-002-04-ADR-代码覆盖率技术选型.md)
- [提示词文档](../prompts/2026-02-05-002-04-prompt-代码覆盖率.md)
- [会话记录](../sessions/2026-02-05-002-04-session.md)
- [变更日志 v2.0.0](../changelog/2026-02-05-002-04-changelog-v2.md)
- [复盘文档](../retros/2026-02-05-002-04-retro.md)