datai/docs/archive/sessions/2026-01-26-010-3-session.md

16 KiB
Raw Blame History

会话记录

元数据

  • 需求编号010-3
  • 开始时间2026-01-26 16:30:00
  • 结束时间2026-01-26 17:00:00
  • 当前阶段:阶段 2方案设计

需求澄清记录

需求分析 (REQ-010-3)

用户要求对 REQ-010-3 进入阶段 2方案设计。

需求分析

通过阅读 REQ-010-3.md 需求文档,确认了以下核心需求:

  1. 组织配置CRUD功能实现Salesforce组织配置的增删改查支持多环境配置。
  2. OAuth认证信息加密存储使用AES加密算法加密OAuth认证信息确保安全性。
  3. 环境类型管理支持Sandbox/Production环境类型选择和管理。
  4. 存储配置支持多种存储渠道local/minio/oss的灵活配置。
  5. 连接状态管理实现连接状态管理Active/Inactive/Auth_Invalid
  6. 配置验证功能验证OAuth认证信息和连接可用性。

技术约束分析

  • 技术栈限制必须基于现有的Spring Boot 3 + Vue 3技术栈
  • 架构约束必须遵循Authentication.canvas中定义的架构和调用关系
  • 模块约束必须在datai-salesforce-metadata模块下实现
  • 数据库约束必须使用MyBatis Plus作为持久层框架
  • 认证约束必须使用现有的认证模块和SessionManager进行会话管理
  • 安全约束OAuth认证信息必须加密存储不存明文密码存储配置中的敏感信息必须加密存储
  • API约束必须使用现有的集成核心功能进行Salesforce API调用
  • 存储约束必须使用datai-scene-file模块提供的StorageBucket抽象接口和StorageUtils工具类

阶段 1需求定义

  • 状态:已完成
  • 输出文档

阶段 2方案设计

  • 状态:已完成
  • 设计内容
    • 系统架构设计设计了包含Controller、Service、Mapper、Entity的分层架构以及与StorageBucket接口、SessionManager的集成关系
    • 技术方案设计
      • OAuth认证信息加密方案使用AES-256-CBC算法密钥长度256位填充模式PKCS5Padding
      • 存储配置方案集成datai-scene-file模块的StorageBucket接口支持local/minio/oss三种存储类型
      • 连接验证方案使用SessionManager验证连接更新连接状态
    • 数据模型设计
      • 数据库表设计datai_meta_org_config表包含17个字段5个索引
      • 实体类设计DataiMetaOrgConfig实体类使用Lombok注解继承BaseEntity
      • 枚举类型设计EnvironmentType、StorageType、ConnectionStatus三个枚举类型
      • 数据字典设计sf_environment_type、sf_storage_type、sf_connection_status三个字典类型
    • 接口设计
      • RESTful API设计8个接口list、getInfo、add、edit、remove、batchRemove、validate、switchPrimary
      • 接口权限设计:使用@PreAuthorize注解进行方法级权限控制
      • 接口文档设计使用Swagger注解自动生成API文档
    • 实现要点设计
      • 关键实现逻辑OAuth认证信息加密存储、存储配置验证、连接验证
      • 异常处理设计CryptoException、StorageConnectionException、ConnectionValidationException、ValidationException
      • 性能优化设计:数据库索引优化、分页查询优化、缓存优化、敏感字段查询优化
      • 安全设计数据加密、权限控制、防注入SQL注入、XSS攻击
  • 重要更新
    • 实体类位置DataiMetaOrgConfig 位于 datai-salesforce-metadata 模块(与实际实现保持一致)
    • 表名datai_meta_org_config遵循元数据模块命名规范
    • 职责说明:与 datai_sf_login_history 表职责不同,不可合并
    • 引用关系datai_meta_task 表通过 org_config_id 外键引用此表
  • 输出文档

阶段 3方案决策

  • 状态:已完成
  • 决策内容
    • 决策点1OAuth认证信息加密方案

      • 方案1AES-256-CBC推荐方案
        • 优点安全性高使用256位密钥广泛使用社区支持好Java Cryptography API原生支持性能较好适合大量数据加密
        • 缺点密钥管理复杂需要安全存储需要处理初始化向量IV填充模式可能影响性能
      • 方案2RSA非对称加密
        • 优点:密钥管理简单,公钥加密,私钥解密;不需要处理初始化向量;安全性高,基于大数分解难题
        • 缺点加密速度慢不适合大量数据密钥长度较长占用存储空间大Java Cryptography API支持相对复杂
      • 最终决策选择AES-256-CBC算法与已有ADR-0012记录保持一致
    • 决策点2存储配置方案

      • 方案1集成datai-scene-file模块的StorageBucket接口推荐方案
        • 优点复用现有模块减少重复开发统一存储抽象易于扩展支持多种存储类型local、minio、oss代码复用性高维护成本低
        • 缺点依赖外部模块增加耦合度需要了解StorageBucket接口的使用方法可能存在版本兼容性问题
      • 方案2自定义存储抽象接口
        • 优点:完全自主控制,不受外部模块限制;可以根据项目需求定制接口;减少外部依赖
        • 缺点需要重新开发和维护存储抽象增加开发成本和时间可能与datai-scene-file模块功能重复
      • 最终决策选择集成datai-scene-file模块的StorageBucket接口复用现有模块减少重复开发
    • 决策点3连接验证方案

      • 方案1使用SessionManager验证连接推荐方案
        • 优点复用现有SessionManager减少重复开发统一会话管理易于维护支持多种认证方式
        • 缺点依赖SessionManager的实现可能需要修改SessionManager以支持新功能
      • 方案2自定义连接验证逻辑
        • 优点:完全自主控制,不受外部限制;可以根据项目需求定制验证逻辑;减少外部依赖
        • 缺点需要重新开发和维护验证逻辑增加开发成本和时间可能与SessionManager功能重复
      • 最终决策选择使用SessionManager验证连接与已有ADR-0012记录保持一致
    • 冲突检查搜索已有ADR记录发现ADR-0012-org-config-management.md已记录OAuth认证信息加密方案和连接验证方案当前设计是对其细化和补充存储配置方案与已有ADR记录存在冲突已创建新的ADR记录记录该决策

    • ADR记录检查结果

      • ADR-0012-org-config-management.md记录了OAuth认证信息加密方案AES-256-CBC和连接验证方案使用SessionManager
      • 2026-01-26-010-3-ADR-Salesforce组织配置管理存储方案.md记录了存储配置方案集成datai-scene-file模块的StorageBucket接口
      • 结论所有三个关键决策点都已经有对应的ADR记录且与当前设计文档一致无需创建新的ADR记录
  • 输出文档

阶段 4数据库结构

  • 状态:已完成
  • 数据库变更分析
    • 涉及数据库变更:是
    • 需要创建的表datai_meta_org_configSalesforce组织配置表
    • 需要插入的数据
      • sys_dict_type3个字典类型meta_org_type、meta_auth_type、meta_connection_status
      • sys_dict_data8个字典数据3个组织类型、2个认证类型、3个连接状态
    • 需要创建的索引3个索引1个主键索引、1个唯一索引、1个普通索引
  • 重要更新
    • 表名datai_meta_org_config遵循元数据模块命名规范与实际实现保持一致
    • 字段调整移除了storage_type、storage_config、connection_status、is_primary字段因为这些字段不在实际实现中
    • 字典类型移除了meta_storage_type因为实际实现中不涉及存储类型配置
    • 版本v4.0(更新:表名从 datai_sf_org_config 改为 datai_meta_org_config与实际实现保持一致
  • 输出文档

阶段 5提示词生成

  • 状态:已完成
  • 提示词内容摘要
    • 引用真源需求文档、设计文档、决策记录、SQL脚本
    • 需求描述组织配置CRUD功能、OAuth认证信息加密存储、组织类型管理、认证类型管理、连接状态管理、配置验证功能、令牌管理
    • 设计方案Spring Boot 3 + MyBatis Plus + Spring Security 6 + Lombok + SwaggerAES-256-CBC加密算法使用SessionManager验证连接实体类位于 datai-salesforce-metadata 模块
    • 输出格式要求必须包含Entity、Mapper、Service、Controller、DTO、VO、枚举类型、工具类必须包含单元测试必须符合Spring Boot最佳实践必须遵循若依框架规范必须使用MyBatis Plus进行数据库操作
    • 代码规范要求:类命名、方法命名、变量命名、常量命名、注释规范、代码格式、导入规范
    • 测试要求单元测试覆盖率不低于80%测试用例包含CRUD功能、OAuth认证信息加密、连接验证、异常场景使用JUnit 5和Mockito进行测试测试用例命名规范
    • 注意事项:实体类必须位于 datai-salesforce-metadata 模块;表名必须使用 datai_meta_org_config使用SessionManager进行连接验证使用AES-256-CBC算法加密OAuth认证信息使用@TableField(select = false)注解避免敏感字段被查询;使用@PreAuthorize注解进行方法级权限控制使用@Valid注解进行参数验证使用@Log注解记录操作日志遵循若依框架规范处理异常情况使用枚举类型管理组织类型、认证类型、连接状态使用MyBatis Plus的BaseMapper提供的CRUD方法使用QueryWrapper实现条件查询使用Page实现分页查询使用Lombok注解简化代码使用Swagger注解自动生成API文档
  • 重要更新
    • 实体类位置DataiMetaOrgConfig 位于 datai-salesforce-metadata 模块,与实际实现保持一致
    • 表名datai_meta_org_config遵循元数据模块命名规范
    • 移除内容移除了存储配置相关内容storage_type、storage_config、StorageType枚举因为实际实现中不涉及存储配置
    • 决策记录更新:引用了 ADR-0012-org-config-management.md而不是 2026-01-26-010-3-ADR-Salesforce组织配置管理存储方案.md
  • 输出文档

阶段 5.5:架构重构决策

  • 状态:已完成
  • 重构原因
    • 问题发现DataiMetaOrgConfig 实体类位于 datai-salesforce-metadata 模块,但 setting 和 auth 模块需要使用该实体类会造成循环依赖metadata → auth → setting → metadata
    • 模块依赖关系datai-salesforce-setting基础配置模块→ datai-salesforce-auth认证模块→ datai-salesforce-metadata元数据模块
    • 架构原则:遵循模块依赖关系,避免循环依赖,确保模块职责清晰
  • 重构决策
    • 删除:删除 metadata 模块中的 DataiMetaOrgConfig 实体类
    • 创建:在 setting 模块中创建 DataiSfOrgConfig 实体类
    • 重命名:将表名从 datai_meta_org_config 改为 datai_sf_org_config
    • 更新更新设计文档、提示词文档、SQL脚本反映实体类位置和名称的变化
  • 重构内容
    • 实体类迁移
      • 删除:datai-salesforce-metadata/src/main/java/com/datai/metadata/model/domain/DataiMetaOrgConfig.java
      • 创建:datai-salesforce-setting/src/main/java/com/datai/setting/model/domain/DataiSfOrgConfig.java
    • SQL脚本更新
      • 表名datai_meta_org_config → datai_sf_org_config
      • 版本v2.0 → v3.0
      • 说明:重构:将表名从 datai_meta_org_config 改为 datai_sf_org_config实体类从 metadata 模块迁移到 setting 模块
    • 设计文档更新
      • 模块架构datai-salesforce-metadata → datai-salesforce-setting
      • 实体类名称DataiMetaOrgConfig → DataiSfOrgConfig
      • 表名datai_meta_org_config → datai_sf_org_config
      • 接口路径:/metadata/metaconfig → /setting/sforgconfig
      • 权限标识metadata:orgconfig → setting:sforgconfig
    • 提示词文档更新
      • 文件路径datai-salesforce-metadata → datai-salesforce-setting
      • 类名DataiMetaOrgConfig → DataiSfOrgConfig
  • 架构优势
    • 避免循环依赖setting 模块作为基础配置模块,不依赖其他模块
    • 职责清晰setting 模块负责全局配置管理auth 模块负责认证metadata 模块负责元数据管理
    • 易于维护:模块依赖关系清晰,便于后续扩展和维护
    • 符合设计原则:遵循依赖倒置原则,高层模块不依赖低层模块,都依赖抽象
  • 输出文档

阶段 6代码生成

  • 状态:待开始

阶段 7会话记录

  • 状态:待开始

阶段 8变更日志

  • 状态:待开始

阶段 9复盘和接口

  • 状态:待开始

阶段 10代码提交

  • 状态:待开始

关键设计决策

  1. OAuth加密方案选择AES-256-CBC算法密钥长度256位填充模式PKCS5Padding使用Base64编码存储密文
  2. 存储配置方案集成datai-scene-file模块的StorageBucket接口支持local/minio/oss三种存储类型使用StorageUtils工具类管理存储渠道选择和切换
  3. 连接验证方案使用SessionManager验证连接更新连接状态为Active/Inactive/Auth_Invalid
  4. 枚举类型设计使用Java枚举类型使用@EnumValue注解映射数据库值提供友好的描述信息
  5. 敏感字段保护:使用@TableField(select = false)注解避免敏感字段被查询,只在需要时才解密敏感字段

遇到的问题

解决方案

经验教训

  1. 设计文档完整性:设计文档必须包含所有必需章节(元数据、设计概述、架构设计、技术方案、数据模型、接口设计、实现要点、相关文档)
  2. 技术选型合理性:技术选型必须充分考虑性能、安全性、可维护性等因素,并提供充分的选择理由
  3. 接口设计规范性接口设计必须符合RESTful规范使用正确的HTTP方法和URL路径
  4. 数据模型设计:数据模型设计必须考虑数据库规范,包括字段类型、长度、必填、默认值、索引等
  5. 安全设计重要性:安全设计必须贯穿整个设计过程,包括数据加密、权限控制、防注入等