4.4 KiB
4.4 KiB
提示词:检查部署和检索状态
引用真源
需求描述
根据需求文档和设计文档,实现 Salesforce 元数据 API 的状态检查功能,包括:
- 部署状态检查 (
CheckDeployStatus):查询指定asyncId的部署操作状态。 - 检索状态检查 (
CheckRetrieveStatus):查询指定asyncId的检索操作状态。 - 状态轮询:提供服务端阻塞式轮询接口,直到操作完成(Succeeded/Failed/Canceled)或超时。
- 数据持久化:
- 将每次检查结果记录到
datai_metadata_status_check表(审计日志)。 - 同步更新主表 (
datai_metadata_deploy或datai_metadata_retrieve) 的最新状态。
- 将每次检查结果记录到
- REST API:提供标准的 RESTful 接口供前端调用。
设计方案
根据设计文档和 ADR,采用以下技术方案:
- 架构:Controller -> Service -> Repository 分层架构。
- Salesforce 集成:
- 使用
datai-salesforce-auth模块的MetadataConnectionFactory获取连接。 - 调用
metadata.jar中的checkDeployStatus和checkRetrieveStatus方法。
- 使用
- 数据库交互:使用 MyBatis Plus 进行 CRUD 操作。
- 轮询策略:复用服务端同步轮询策略(
Thread.sleep循环),支持可配置的间隔和超时时间。 - 异常处理:捕获
ConnectionException并转换为SalesforceOperationException或SalesforceAuthException。
输出格式要求
- 必须包含以下 Java 文件:
- Entity:
MetadataStatusCheckEntity.java(对应datai_metadata_status_check表) - Mapper:
MetadataStatusCheckMapper.java - Service:
MetadataStatusService.java(核心业务逻辑,包含 check 和 poll 方法) - Controller:
MetadataStatusController.java(REST API 接口) - Repository: 如果项目使用 Repository 模式封装 Mapper,请创建
MetadataStatusCheckRepository.java;否则直接使用 Mapper。
- Entity:
- 必须包含 Mapper XML 文件:
MetadataStatusCheckMapper.xml(如果需要自定义 SQL)
- 必须包含单元测试:
MetadataStatusServiceTest.java(覆盖 check、poll、history 查询等逻辑)MetadataStatusControllerTest.java(测试 REST API)
代码规范要求
- 命名规范:
- 类名:UpperCamelCase (e.g.,
MetadataStatusService) - 方法名:lowerCamelCase (e.g.,
checkDeployStatus) - 变量名:lowerCamelCase (e.g.,
asyncId) - 常量名:UPPER_SNAKE_CASE (e.g.,
DEFAULT_POLL_INTERVAL)
- 类名:UpperCamelCase (e.g.,
- 注释规范:
- 所有类和接口必须有 Javadoc 类注释(包含作者、日期、描述)。
- 所有 public 方法必须有 Javadoc 方法注释(包含参数、返回值、异常说明)。
- 复杂逻辑必须有行内注释。
- 日志规范:
- 使用 Slf4j 记录关键操作步骤(如“开始检查状态”、“轮询完成”、“发生异常”)。
- 异常日志必须包含堆栈信息。
- 依赖注入:使用构造器注入或
@Autowired。 - 框架规范:
- 使用
@RestController,@Service,@Mapper,@TableName等标准注解。 - 使用 MyBatis Plus 的
IService和ServiceImpl简化开发。
- 使用
测试要求
- 单元测试覆盖率:核心业务逻辑(Service 层)覆盖率不低于 80%。
- 测试场景:
- 正常场景:状态检查成功,返回 Succeeded;轮询成功结束。
- 异常场景:Salesforce 连接失败;InvalidSessionId;InvalidAsyncId;轮询超时。
- 边界条件:
includeDetails参数为 true/false。
- Mocking:使用 Mockito 模拟
MetadataConnection、MetadataConnectionFactory和 Repository/Mapper 的行为,避免真实调用 Salesforce API 和数据库。
注意事项
- 数据一致性:更新主表和插入审计表应在同一个事务中(使用
@Transactional)。 - 性能:轮询循环中必须有
Thread.sleep,防止 CPU 空转。 - 表关联:在更新主表时,需先检查记录是否存在。