73 Commits

Author SHA1 Message Date
xiangning
3d5604d80c feat(scripting): 完整 CQRS 层 + 10 个管理端点
Commands: Create/Update/Delete/Publish/Disable/Test/Invoke
Queries:  List/Detail/ExecutionLogs
DTOs:     ScriptDto/ScriptExecutionLogDto + PagedResult
Endpoints (GET/POST/PUT/DELETE /scripts/*):
  - GET    /scripts              scripts.read
  - GET    /scripts/{id}         scripts.read
  - POST   /scripts              scripts.create
  - PUT    /scripts/{id}         scripts.update
  - DELETE /scripts/{id}         scripts.delete
  - POST   /scripts/{id}/publish scripts.publish
  - POST   /scripts/{id}/disable scripts.disable
  - POST   /scripts/{id}/test    scripts.test
  - GET    /scripts/{id}/logs    scripts.read
  - POST   /scripts/{name}/invoke scripts.run

Task T5 of scripting module refactor
2026-07-07 09:26:54 +08:00
xiangning
bfb83957b6 fix(scripting): ScriptTypeRegistry 程序集过滤按真实模块前缀匹配
原实现按 'BuildFlow.' 前缀过滤,但本仓库业务程序集命名为
Platform.* / Workflow.* / Scripting.* / File.* / IM.* / Rag.* /
BuildFlow.*,仅 rag 与共享层用 BuildFlow 前缀。
导致 Scan() 结果恒为空、方法面板无任何类型可展示。

改为按业务模块前缀白名单匹配,并排除 .Host 程序集。

Task T4 of scripting module refactor
2026-07-07 09:11:02 +08:00
xiangning
989c28da4d refactor(tests): 更新脚本类型注册表测试中的空值检查语法
- 将 m.ResponseType is not null 替换为 m.ResponseType != null
- 保持测试逻辑功能不变
- 提高代码可读性与一致性
2026-07-07 09:07:13 +08:00
xiangning
505c46ec05 feat(scripting): 添加脚本类型元数据服务与按钮动作链功能
- 扩展 CreateBuildFlowButtonDefinitionRequest 添加 BeforeActionsJson 和 AfterActionsJson 字段
- 为自定义函数请求添加 Type、HttpMethod、HttpUrl、HttpHeaders、HttpBodyTemplate 字段
- 添加 ScriptTypeRegistry 服务用于反射扫描 BuildFlow.* 程序集中的 MediatR 类型
- 实现 GetScriptAssemblyListEndpoint 和 GetScriptTypeMetaEndpoint 两个新端点
- 添加 ScriptTypeMeta 相关 DTO 和 GetScriptTypeMetaQuery 查询处理器
- 为年份和年月字符串添加单元测试避免误判为 DateTime 类型
- 在应用启动时自动扫描并缓存脚本可用类型元数据
2026-07-07 09:07:05 +08:00
xiangning
bec5bfd0dd fix(scripting): T3 code quality 修复
- C1: 脚本运行时异常未捕获导致 500(新增 catch-all Failed 日志+包装)
- I1: DateTime.TryParse 误判日期样字符串(改为严格 ISO-8601 正则前置)
- M1: IScriptExecutionService XML 注释补 Logger
- M2: TestExecuteAsync → ExecuteTestAsync 命名一致性
- M7: 递归深度 ++ 移入 try 块保证 finally 配对

T3 code quality review fixes
2026-07-07 08:55:16 +08:00
xiangning
624579cf78 feat(scripting): ScriptGlobals + ScriptExecutionService + 沙箱 + 编译缓存
- ScriptGlobals 注入 ISender/ICurrentUserContext/CancellationToken/ScriptLogger
- ScriptLogger 收集日志写入 ScriptExecutionLog.LogLines
- 变量类型升级:JsonElement→原生类型(long/double/decimal/bool/string/DateTime/Guid)
- 程序集白名单(含 BuildFlow.* Application/Domain,排除 Infrastructure)
- 代码黑名单扫描(防 System.Reflection/IO.File/Net.Http 等)
- 编译缓存(按 code SHA256 缓存委托,上限 500)
- 调用深度计数器(AsyncLocal,超 5 抛异常,防递归)
- 草稿可测(TestExecuteAsync 跳过 Published 校验)

Task T3 of scripting module refactor
2026-07-07 08:42:49 +08:00
xiangning
a978e7f868 feat(workflow): 添加自定义函数类型和按钮三阶段动作链功能
- 引入 CustomFunctionType 枚举,支持 Script 和 Http 两种函数类型
- 在自定义函数中添加 Http 相关字段(HttpMethod、HttpUrl、HttpHeaders、HttpBodyTemplate)
- 实现 HTTP 函数执行器,支持变量替换和 SSRF 防护
- 将按钮动作链拆分为 before、main、after 三个阶段
- 新增前置和后置动作 JSON 字段存储
- 实现批量执行多个函数的 executeFunctions 动作类型
- 更新数据库迁移以支持新的字段结构
- 调整相关 DTO、命令和处理器以兼容新功能
2026-07-06 18:03:22 +08:00
xiangning
d1c8988054 feat(scripting): 迁移 Domain 实体+EF 配置+表重命名迁移
- ScriptFunction/ScriptExecutionLog 实体(从 CustomFunction 迁移)
- ScriptStatus/ScriptExecutionStatus 枚举
- ScriptingDbContext + 两个 Configuration(表名 funcs/func_execution_logs)
- EF Core 迁移:RenameTablesForScriptingModule(b_funcs→funcs 保数据)
- 新增 LogLines 字段(Logger 输出收集)

Task T2 of scripting module refactor
2026-07-06 17:56:40 +08:00
xiangning
052dd7ff4c chore(scripting): 修正 Host 模块注释的业务模块计数(五→六) 2026-07-06 17:42:20 +08:00
xiangning
54648ca1ac feat(scripting): 新建 scripting 模块三层骨架
- Scripting.Domain/Application/Infrastructure 三个 csproj
- 三个 ABP Module 类
- 挂入 BuildFlowHostModule [DependsOn]
- 加入 BuildFlow.slnx 解决方案

Task T1 of scripting module refactor
2026-07-06 17:36:45 +08:00
xiangning
b0cf3949d0 feat(workflow): 扩展按钮定义功能并优化错误处理
- 实现三阶段动作链:前置钩子(BeforeActionsJson)、主链(ActionsJson)、后置钩子(AfterActionsJson)
- 扩展自定义函数支持HTTP请求类型,添加相关字段配置
- 重构异常处理机制,引入语义错误码字符串替代数字码
- 优化数据库表名前缀,统一使用b_前缀提升命名规范性
- 实现菜单路由名称自动派生,支持Code到Name的转换
- 重构错误响应信封,code字段改为语义错误码字符串格式
- 添加ImportJobProcessorService后台服务支持
- 优化Swagger文档默认URL重定向逻辑
- 修复IM模块列缺失的数据库补丁机制
2026-07-06 17:27:32 +08:00
ljw559
4ec64c773a feat: 文件大小回填与文件夹递归总大小计算
- IS3StorageService 新增 GetObjectSizeAsync(HeadObject 取 ContentLength)
- 新增 FileSizeBackfillHelper:读路径惰性回填历史 Size=0 的文件
- 新增 FolderSizeCalculator:后序 DFS 计算文件夹递归总大小
- GetRootFiles/GetFolder 加载时回填;GetFolderTree 计算并返回 FolderDto.Size
- FolderDto 增加 Size 字段,FolderMapper.ToDto 适配

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 00:45:46 +08:00
xiangning
d45d655a5a feat(custom-function): 添加表单定义ID支持
- 在CreateCustomFunctionRequest中添加FormDefinitionId字段
- 修改CreateCustomFunctionEndpoint以传递FormDefinitionId参数
- 在GetCustomFunctionListRequest中添加FormDefinitionId过滤条件
- 更新GetCustomFunctionListEndpoint以支持按表单定义ID查询
- 配置数据库初始化器使用蛇形命名约定
2026-07-05 10:24:03 +08:00
xiangning
baaff8db63 feat(workflow): 添加自定义函数表单绑定及权限控制功能
- 新增自定义函数与表单定义绑定关系字段 FormDefinitionId
- 实现按钮调用函数时的表单作用域权限校验机制
- 实现按钮提交表单时的作用域权限检查功能
- 添加自定义函数列表按表单定义筛选查询能力
- 新增 RelationPicker 关联选择表单组件支持
- 完善菜单权限体系支持受限但可见菜单配置
- 添加文件消息大小限制验证(最大200MB)
- 优化表单聚合变量同步异常处理机制
- 增加BuildFlow管理后台入口菜单种子数据
- 补充相关单元测试和架构约束测试用例
2026-07-05 09:30:45 +08:00
xiangning
96f11b5d87 feat(workflow): 添加表单提交功能并优化任务审批端点
- 在 ApproveTaskEndpoint 中返回布尔值响应并使用 Send.OkAsync
- 在 RejectTaskEndpoint 中返回布尔值响应并使用 Send.OkAsync
- 向 BuildFlowButtonActionExecutor 添加 submitForm 动作类型支持
- 实现 SubmitFormAsync 方法处理表单数据提交和保存逻辑
- 添加 ReadGuid 辅助方法解析 JSON 中的 GUID 值
- 更新 RAGStreamEndpoint 中的系统提示词以优化 AI 回答格式
- 为按钮动作执行器添加表单聚合服务和派生服务依赖注入
- 添加单元测试验证提交表单后运行函数的动作链执行流程
2026-07-04 21:38:31 +08:00
xiangning
54dc3fc26e refactor(rag): 重构AI对话和工作流集成实现
- 移除IWorkflowTriggerService接口及其实现,改用Mediator模式直接发送命令
- 更新AiBotHandler移除workflowTrigger依赖,使用新命令模式触发工作流
- 修改ApproveTaskEndpoint和RejectTaskEndpoint返回bool类型并使用Send.OkAsync
- 更新appsettings.json中AI助手的默认指令配置
- 在BuildFlowHostModule.cs中移除旧的工作流触发服务注册
- 添加SSE流式响应路径前缀配置以支持RAG聊天流
- 重构ChatAgentService使用HTTP客户端工厂和运行时配置解析
- 实现AiChatOutputSanitizer用于清洗AI输出中的模板内容
- 更新EmbeddingService使用运行时配置解析器动态创建客户端
- 调整RAG查询处理器中的系统提示指令内容
- 添加构建流按钮操作的单元测试验证发布和禁用功能
- 扩展即时消息集成测试覆盖文件消息元数据处理场景
- 更新平台权限种子数据添加按钮发布和禁用权限
- 实现AI模型运行时配置解析器支持动态模型切换
2026-07-04 21:29:37 +08:00
xiangning
d6dc6be51d feat(rag): 扩展分块模式支持更多文档处理策略
- 将分块模式取值范围从 0-2 扩展到 0-5,新增 Separator、ByPage 和 Token 模式
- 更新知识库创建和更新请求验证器以支持新的分块模式范围
- 修改文档上传端点的分块策略覆盖逻辑以兼容新模式
- 更新相关错误消息提示以反映完整的分块模式选项
- 在菜单端点中添加渲染类型和运行时视图模式字段支持
- 修改菜单更新请求参数 ID 类型从 Guid 调整为 long 类型
2026-07-04 19:49:37 +08:00
xiangning
2181f7dd49 feat(platform): 完善平台功能与权限管理
- 在菜单系统中新增 RenderType、FormDefinitionId 和 RuntimeViewMode 字段
- 实现自定义表单菜单类型的组件映射和验证逻辑
- 为分片上传相关端点添加 file:upload 权限控制
- 为桶和文件夹操作添加 bucket:write 和 file:write 权限控制
- 为文件共享功能添加 file-share:write 权限控制
- 为文件读取操作添加 file:read 权限控制
- 扩展 AI 模型提供商枚举,支持更多模型供应商
- 在 AI 模型创建和更新时添加枚举值验证
- 重构工作流按钮权限检查逻辑,使用统一的权限码查询方式
- 为 JSON 格式文档添加提取器支持
- 增强表单数据派生服务,支持自定义表单关联解析
- 为表单数据添加按表单定义 ID 的索引优化
- 添加聊天消息搜索和上下文获取的集成测试
- 修正删除菜单端点的 ID 类型从 Guid 改为 long
2026-07-04 19:38:43 +08:00
xiangning
1aeaf7b1a6 feat(platform): 实现菜单管理功能并完善权限控制
- 将菜单实体的 ID 类型从 Guid 改为 long,并配置为自增主键
- 添加菜单创建、删除、树形结构构建等完整的 CRUD 操作支持
- 为文件上传相关端点添加 file:upload 权限验证
- 为文件操作端点添加 file:read 和 file:write 权限控制
- 为通知功能添加 notification:read 权限限制
- 实现 BuildFlow 按钮执行的权限检查机制
- 在 IM 模块中集成 Redis 未读计数器优化性能
- 更新用户主页路径从 /workspace 到 /dashboard/workspace
- 添加 SignalR Hub 授权和 WebSocket 连接安全保护
- 新增平台测试项目并完善按钮权限测试用例
2026-07-04 17:21:07 +08:00
xiangning
1ae9795361 refactor(platform): 重构菜单表结构并统一命名规范
- 移除旧版 PascalCase 列名的 menus 表
- 创建符合 snake_case 规范的新 menus 表结构
- 添加完整的菜单字段包括 ID、名称、路径、组件、重定向等
- 实现菜单层级关系的父子关联外键约束
- 增加菜单权限控制相关字段如角色授权、可见性等
- 统一时间戳和软删除标准字段
- 创建菜单编码唯一索引和父级关联索引
2026-07-03 18:23:25 +08:00
xiangning
1fa0b85ad8 fix: clean Jenkinsfile (single-quote sh blocks) 2026-07-03 18:12:30 +08:00
xiangning
add33f2740 Merge remote-tracking branch 'origin/main' 2026-07-03 17:38:01 +08:00
xiangning
4034bb8300 fix: 补全 MAF 升级的 csproj 包引用
Infrastructure.csproj 修正:
- Microsoft.Agents.AI.OpenAI 1.6.1 → 1.12.0
- OpenAI 2.10.0 → 2.11.0
- 新增 Microsoft.Extensions.AI 10.7.0 + Microsoft.Extensions.AI.OpenAI 10.7.0

这些包是 ChatAgentService 用 AsIChatClient()/AsAIAgent() 的依赖,
之前代码改了但 csproj 被 linter 回退,导致 clone 后无法 build。
2026-07-03 17:37:12 +08:00
xiangning
3b4075360d fix: clean Jenkinsfile (single-quote sh blocks) 2026-07-03 17:37:03 +08:00
xiangning
27daae8257 fix Jenkinsfile escape-free 2026-07-03 17:31:03 +08:00
xiangning
84347a1668 Merge remote-tracking branch 'origin/main' 2026-07-03 17:27:17 +08:00
xiangning
a4a575cc4f feat(workflow): 添加更新流程实例变量功能
- 新增 UpdateWorkflowInstanceVariablesCommand 命令处理变量更新逻辑
- 实现 UpdateWorkflowInstanceVariablesCommandHandler 验证并保存变量到数据库
- 添加 UpdateWorkflowInstanceVariablesEndpoint 提供 REST API 接口
- 创建 UpdateWorkflowInstanceVariablesRequest 定义请求数据结构
- 实现 JSON 格式验证确保变量数据有效性
- 支持人工干预修正流程运行时数据的场景需求
2026-07-03 17:27:11 +08:00
xiangning
3765a77b05 fix: rewrite Jenkinsfile (proper escaping + feishu card) 2026-07-03 17:20:10 +08:00
xiangning
0da78f209a fix: remove timestamps 2026-07-03 17:15:45 +08:00
xiangning
1e0844800e refactor(rag): 重构RAG查询命令处理器类名和代码格式
- 将RAGQueryCommandHandler重命名为RagQueryCommandHandler
- 调整代码缩进格式
- 优化空行布局以提高代码可读性
2026-07-03 17:14:13 +08:00
xiangning
7e8623730b style(namespace): 统一命名空间大小写格式
- 将 file 目录下的命名空间从 BuildFlow.Host.Endpoints.file 统一为 BuildFlow.Host.Endpoints.File
- 将 im 目录下的命名空间从 BuildFlow.Host.Endpoints.im 统一为 BuildFlow.Host.Endpoints.IM
- 将 rag 目录下的命名空间从 BuildFlow.Host.Endpoints.rag 统一为 BuildFlow.Host.Endpoints.Rag
- 将 workflow 目录下的命名空间从 BuildFlow.Host.Endpoints.workflow 统一为 BuildFlow.Host.Endpoints.Workflow
- 将 platform 目录下的命名空间从 BuildFlow.Host.Endpoints.rag 统一为 BuildFlow.Host.Endpoints.Platform
- 修复了多个端点类的命名空间大小写不一致的问题
2026-07-03 17:13:17 +08:00
xiangning
69a104b6b5 Merge remote-tracking branch 'origin/main' 2026-07-03 17:12:58 +08:00
xiangning
2548c3ed91 refactor(endpoints): 统一命名空间大小写规范
- 将 file 相关端点命名空间从小写改为首字母大写
- 将 im 相关端点命名空间从小写改为首字母大写
- 将 workflow 相关端点命名空间从小写改为首字母大写
- 将 rag 相关端点命名空间从小写改为首字母大写
- 将 platform 相关端点命名空间从小写改为首字母大写
- 保持代码功能不变,仅调整命名空间命名风格一致性
2026-07-03 17:12:48 +08:00
xiangning
7310eb2ab0 fix: correct package emoji (clean) 2026-07-03 17:10:52 +08:00
xiangning
b166fbf6ba fix: correct package emoji encoding 2026-07-03 17:10:20 +08:00
xiangning
c95b35091d refactor: CI/CD pipeline with stages + feishu card notification (api) 2026-07-03 17:09:00 +08:00
xiangning
81fbf63504 feat(workflow): 集成平台消息中心实现工作流通知推送
- 移除文件端点的权限控制以支持无权限访问
- 添加 IPlatformNotificationPublisher 接口定义跨模块通知发布能力
- 实现 WorkflowNotificationPublisher 将工作流通知转发到平台消息中心
- 在 NotificationService 中集成平台通知发布功能
- 添加 NoOpPlatformNotificationPublisher 用于单元测试
- 配置服务注册将工作流通知连接到平台消息系统
- 支持按用户ID批量发布工作流通知到平台通知表
- 复用平台的 fanout 落库和 SignalR 铃铛推送机制
- 实现容错机制确保通知失败不影响工作流主链路
2026-07-03 16:33:46 +08:00
xiangning
f932781040 feat(rag): 集成 Microsoft Extensions AI 框架并重构对话代理服务
- 引入 Microsoft.Extensions.AI.Abstractions 依赖包
- 重构 ChatAgentService 实现,支持多轮对话历史
- 更新 IAIChatAgent 接口,统一使用 ChatMessage 消息格式
- 优化流式输出处理逻辑,提升性能表现

feat(im): 增强即时通讯会话功能支持置顶备注免打扰

- 扩展会话 DTO,新增 IsPinned、IsMuted、OtherUserRemark 属性
- 扩展 ConversationParticipant 实体,新增置顶和备注相关字段
- 实现会话置顶功能,支持按置顶时间和最后消息时间排序
- 添加会话备注功能,私聊场景支持自定义备注名称
- 完善免打扰功能,支持用户级别静音设置

feat(file): 实现文件预览服务支持多种鉴权方式

- 新增文件预览端点,支持流式返回文件内容
- 实现三种鉴权方式:授权头、JWT令牌、内部签名
- 集成 KKFileView 预览服务,支持 Office 文档在线预览
- 优化文件访问安全控制,避免直接暴露 S3 链接

feat(rag): 增强 RAG 会话管理支持知识库关联

- 扩展会话创建功能,支持关联知识库
- 新增会话更新功能,支持重命名和切换知识库
- 优化会话 DTO 结构,支持知识库 ID 关联
- 实现知识库检索增强对话功能

feat(workflow): 废弃旧工作流定义接口迁移到图形化存储

- 标记旧的节点边操作端点为废弃状态
- 实现工作流定义图形化存储迁移
- 统一使用 JSON 格式作为单一事实源
- 优化工作流定义查询性能表现

chore(deps): 更新项目依赖包版本解决版本冲突问题

- 添加 Microsoft.Extensions.AI.Abstractions 依赖
- 显式声明 OpenAI 2.11.0 版本解决 CS1705 冲突
- 更新相关依赖包至兼容版本

fix(host): 修复文件预览响应包装中间件配置问题

- 添加文件预览接口到响应绕过前缀列表
- 避免文件流被 JSON 包装和内存缓冲影响性能
- 优化文件下载和预览的中间件处理逻辑

chore(im): 修复 IM 设计时数据库上下文工厂路径问题

- 优化 ImDbContextDesignTimeFactory 路径查找逻辑
- 修复数据库迁移时连接字符串获取问题
- 更新实体映射命名空间引用
2026-07-03 15:58:58 +08:00
xiangning
f04863fb64 feat(workflow): 添加工作流实例配置的版本和代码字段
- 添加 DefinitionVersion 属性用于存储启动时绑定的流程定义版本号
- 添加 DefinitionCode 属性用于存储启动时快照的流程定义Code
- 为新字段添加相应的数据库注释和长度限制
2026-07-03 13:32:18 +08:00
xiangning
8f85a2d3c8 refactor(file): 移除bucket参数并使用默认桶解析器
- 移除AbortMultipartCommand中的BucketName参数
- 移除CompleteMultipartCommand中的BucketName参数
- 移除DeleteFileCommand中的BucketName参数
- 移除DownloadFileQuery中的BucketName参数
- 移除GetFileContentQuery中的BucketName参数
- 移除GetFilePreviewQuery中的BucketName参数
- 移除GetOfficePreviewQuery中的BucketName参数
- 移除InitMultipartCommand中的BucketName参数
- 在各处理器中注入IBucketResolver并获取默认桶
- 更新所有相关端点和请求模型移除bucket参数
- 修改测试代码适配参数变更
- 添加IM离线消息到平台通知中心的跨模块集成实现
2026-07-03 13:32:08 +08:00
xiangning
67dce6b1f4 feat(security): 为端点添加权限控制并优化AI模型配置管理
- 为多个端点添加权限控制,包括文件操作、工作流任务、群组管理和表单相关功能
- 重构ChatAgentService以支持从数据库读取AI模型配置,并提供回退到应用设置的功能
- 在DatabaseInitializer中添加ai_models表的建表脚本,确保表结构存在
- 更新Directory.Build.props以抑制EF1002和NU1605警告
- 为FileDbContext添加Settings实体集合和文件设置实体
- 优化FileDbContextDesignTimeFactory的配置文件查找逻辑,支持多种目录结构
- 修复EF迁移快照中的命名空间引用错误
- 为多个工作流和IM相关端点添加相应的权限验证
2026-07-03 12:49:39 +08:00
xiangning
e6b65b6f8f feat(file): 添加根级文件查询功能
- 新增 GetRootFilesEndpoint 端点,支持 GET /api/files/root 请求
- 添加 GetRootFilesQuery 查询对象用于获取根级文件
- 实现 GetRootFilesQueryHandler 处理器,查询 FolderId 为 null 的文件
- 统一根目录与子文件夹的数据源,均使用数据库而非 S3 列表
- 修复集成测试中的 MongoDB 访问方式,改用 MongoDB.Entities 静态 DB.Default
- 更新权限配置,使 Admin 角色拥有全部权限而非仅部分权限
2026-07-03 12:14:36 +08:00
xiangning
8e3878b9ff ```
test(chat): 更新消息发送命令处理器测试配置

- 移除 MongoDB 集合模拟,改为使用真实数据库连接
- 添加本地 MongoDB 测试连接字符串常量
- 在静态构造函数中初始化 MongoDB.Entities 静态连接
- 简化构建处理器方法,移除不必要的 Mock 对象
- 更新注释说明测试策略从模拟转向真实数据库
```
2026-07-03 11:50:15 +08:00
xiangning
bdd1ad39bb fix: PlatformInfrastructureModule 补 UseSnakeCaseNamingConvention
根因:PlatformDbContext 注册时缺少 UseSnakeCaseNamingConvention,
导致 EF 查询用 PascalCase 列名("Id")但实际表是 snake_case("id"),
报 column u.Id does not exist。
2026-07-03 11:47:37 +08:00
xiangning
47c45bd15f refactor(im): 将 MongoDB 访问方式从原生驱动改为 MongoDB.Entities
- 移除 MongoDbContext 和 IMongoClient 依赖注入配置
- 引入 MongoDB.Entities 库替代原生 MongoDB 驱动
- 使用 DB.Default 静态方法进行数据库操作
- 更新消息文档模型继承 Entity 基类
- 修改索引创建方式为 MongoDB.Entities 格式
- 调整消息历史查询和撤回功能适配新 API
- 更新消息发送和 AI 消息处理的数据访问逻辑
2026-07-03 11:46:43 +08:00
xiangning
69593b2b5f fix: 统一 DesignTimeFactory + 补全 migration + MongoDB 版本对齐
- 5 个 DesignTimeFactory 统一硬编码连接串(不依赖旧 Api 路径)
- file/im Infrastructure 补 EFCore.NamingConventions 包
- IM.Tests MongoDB.Driver 3.4.0 → 3.8.1(与 Infrastructure 一致)
- workflow 删空 Migrations 目录(实际在 Persistence/Migrations/)
- platform/workflow 建表 SQL 已在服务器执行
- build 0/0
2026-07-03 11:18:55 +08:00
xiangning
f8677deeee refactor(workflow): 简化设计时数据库上下文工厂配置
- 移除对 Microsoft.Extensions.Configuration 的依赖
- 删除复杂的 appsettings.json 配置文件查找逻辑
- 将连接字符串改为硬编码方式
- 更新数据库端口为 15432 并修改密码为 dev
- 精简注释说明

feat(im): 添加 MongoDB Entities 包支持

- 引入 MongoDB.Entities 25.1.0 版本依赖
- 升级 MongoDB.Driver 从 3.4.
2026-07-03 11:14:23 +08:00
xiangning
d1d9eb4680 fix(config): 修正 MongoDB 连接账号/密码/authSource
原配置 mongodb://rag:CHANGE_ME@.../im_system?authSource=admin 三处错误:
- 账号 rag 不存在(实为 appuser)
- 密码 CHANGE_ME 是占位符(实为 Wk7mHd3xNp6fQr2tYc8vBs4j)
- authSource=admin(appuser 定义在 app 库,应为 authSource=app)

修正后连接串:
  mongodb://appuser:Wk7mHd3xNp6fQr2tYc8vBs4j@43.134.235.58:17017/im_system?authSource=app

配套权限调整(已远程执行):
  给 appuser 授予 im_system 库 readWrite 角色(原仅有 app 库权限)
  db.grantRolesToUser('appuser', [{role:'readWrite', db:'im_system'}])

验证:appuser 读写 im_system 库正常,IM 两个复合索引
  ({ConversationId,CreatedAt}) / ({ConversationId,_id}) 可正常创建。

注:端口 17017 在前序提交已从 27017 修正。
2026-07-03 10:57:49 +08:00
xiangning
204c4698ff fix(config): 修正 MongoDB 连接端口 27017→17017
原 appsettings.json 中 MongoDb 端口配为 27017,实际服务监听在 17017,
导致启动期 IM MongoDB 建索引始终失败(30s 超时)。
- 27017 不可达(Connection refused)
- 17017 可达

修正后 IM MongoDB 建索引可正常执行。
2026-07-03 10:46:55 +08:00
xiangning
8e9fcb1b10 feat(platform): 添加头像URL解析服务支持预签名头像访问
- 注册IAvatarUrlResolver服务实现头像objectKey到预签名URL的实时转换
- 在GetCurrentUserQueryHandler中集成头像URL解析功能
- 在UpdateProfileCommandHandler中添加头像URL转换逻辑
- 创建IAvatarUrlResolver接口定义头像引用解析契约
- 实现InProcessAvatarUrlResolver通过MediatR委托file模块生成预签名URL
- 修复Swagger UI单文档场景下的自动加载问题
2026-07-03 10:17:09 +08:00