Files
Web_BLS_ProjectConsole/.trae/documents/BLS Project Console 系统功能优化与修复.md
XuJiacheng a8faa7dcaa feat: 重构项目心跳数据结构并实现相关功能
- 重构Redis心跳数据结构,使用统一的项目列表键
- 新增数据迁移工具和API端点
- 更新前端以使用真实项目数据
- 添加系统部署配置和文档
- 修复代码格式和样式问题
2026-01-15 14:14:10 +08:00

6.0 KiB
Raw Permalink Blame History

BLS Project Console 系统功能优化与修复计划

📋 任务概述

完成界面显示修复、Redis数据结构重构、相关代码修改、文档更新和测试验证。

🔍 当前问题分析

1. 界面显示问题

  • ProjectSelector.vue (第54-97行) 包含硬编码的6个测试假数据
  • 没有从Redis读取真实项目心跳数据
  • 界面展示的是静态测试数据,而非真实有效的项目

2. Redis数据结构问题

  • 当前使用分散的键:{projectName}_项目心跳
  • 每个项目的心跳数据独立存储,难以统一管理
  • 缺少统一的项目列表查询机制

3. 后端API现状

  • logs.jscommands.js 都从 {projectName}_项目心跳 读取数据
  • redisKeys.js 定义了 projectHeartbeatKey(projectName) 函数
  • 缺少获取所有项目列表的API端点

4. 测试缺失

  • 项目中没有测试文件
  • 缺少单元测试和集成测试

🎯 实施计划

阶段1Redis数据结构重构

1.1 新增Redis键定义

  • redisKeys.js 中添加 projectsListKey() 函数
  • 定义统一的项目列表键:项目心跳

1.2 创建数据迁移工具

  • 创建 src/backend/services/migrateHeartbeatData.js
  • 实现从分散键到统一列表的迁移逻辑
  • 确保数据完整性和一致性

1.3 更新心跳数据结构

  • 新结构:[{ "apiBaseUrl": "...", "lastActiveAt": 1234567890, "projectName": "..." }]
  • 每个对象包含API地址、最新心跳时间、项目名称

阶段2后端API开发

2.1 创建项目列表API

  • src/backend/routes/ 下创建 projects.js
  • 实现 GET /api/projects 端点
  • 从Redis读取项目列表并返回

2.2 更新现有API

  • 修改 logs.js 以兼容新的数据结构
  • 修改 commands.js 以兼容新的数据结构
  • 保持向后兼容性

2.3 添加数据迁移端点

  • 实现 POST /api/projects/migrate 端点
  • 支持手动触发数据迁移

阶段3前端代码修改

3.1 更新ProjectSelector组件

  • 移除硬编码的测试数据第54-97行
  • /api/projects 获取真实项目列表
  • 实现数据加载状态和错误处理

3.2 更新projectStore

  • 扩展状态管理以支持项目列表
  • 添加项目列表的响应式状态

3.3 更新LogView和CommandView

  • 连接到真实API端点
  • 实现日志和命令的真实功能
  • 添加错误处理和用户反馈

3.4 更新App.vue

  • 修正健康检查端点从3000改为3001
  • 确保服务状态监控正常工作

阶段4文档更新

4.1 更新技术文档

  • 创建或更新 docs/redis-data-structure.md
  • 详细说明新的Redis数据结构设计
  • 提供数据迁移指南

4.2 更新OpenSpec规范

  • 更新 openspec/specs/logging/spec.md
  • 更新 openspec/specs/command/spec.md
  • 更新 openspec/specs/redis-connection/spec.md
  • 添加项目列表相关需求

4.3 创建OpenSpec变更提案

  • 创建 openspec/changes/refactor-project-heartbeat/
  • 编写 proposal.mdtasks.md 和规范增量

阶段5测试开发

5.1 单元测试

  • 创建 src/backend/services/__tests__/migrateHeartbeatData.test.js
  • 测试数据迁移功能
  • 测试Redis键操作

5.2 集成测试

  • 创建 src/backend/routes/__tests__/projects.test.js
  • 测试项目列表API
  • 测试数据迁移API

5.3 前端测试

  • 创建 src/frontend/components/__tests__/ProjectSelector.test.js
  • 测试组件渲染和交互

5.4 性能测试

  • 测试不同项目数量下的性能
  • 测试不同心跳频率下的性能

阶段6代码质量与验证

6.1 代码规范检查

  • 运行 ESLint 检查
  • 运行 Prettier 格式化
  • 确保符合项目代码规范

6.2 功能验证

  • 验证项目选择功能正常
  • 验证日志读取功能正常
  • 验证命令发送功能正常

6.3 性能验证

  • 测试大量项目场景
  • 测试高频心跳场景
  • 优化性能瓶颈

📁 文件修改清单

新增文件

  • src/backend/services/migrateHeartbeatData.js - 数据迁移工具
  • src/backend/routes/projects.js - 项目列表API
  • src/backend/services/__tests__/migrateHeartbeatData.test.js - 迁移测试
  • src/backend/routes/__tests__/projects.test.js - API测试
  • src/frontend/components/__tests__/ProjectSelector.test.js - 组件测试
  • docs/redis-data-structure.md - 数据结构文档
  • openspec/changes/refactor-project-heartbeat/proposal.md - 变更提案
  • openspec/changes/refactor-project-heartbeat/tasks.md - 任务清单
  • openspec/changes/refactor-project-heartbeat/specs/ - 规范增量

修改文件

  • src/backend/services/redisKeys.js - 添加项目列表键
  • src/backend/routes/logs.js - 更新心跳读取逻辑
  • src/backend/routes/commands.js - 更新心跳读取逻辑
  • src/backend/server.js - 注册项目列表路由
  • src/frontend/components/ProjectSelector.vue - 移除假数据连接API
  • src/frontend/store/projectStore.js - 扩展状态管理
  • src/frontend/views/LogView.vue - 连接真实API
  • src/frontend/views/CommandView.vue - 连接真实API
  • src/frontend/App.vue - 修正健康检查端点
  • openspec/specs/logging/spec.md - 更新规范
  • openspec/specs/command/spec.md - 更新规范
  • openspec/specs/redis-connection/spec.md - 更新规范

⚠️ 风险与注意事项

  1. 数据迁移风险:确保迁移过程中数据不丢失
  2. 向后兼容性保持现有API的兼容性
  3. 性能影响:大量项目时需要优化查询性能
  4. 测试覆盖:确保所有修改都有对应的测试

验收标准

  1. 界面只展示真实有效的项目数据
  2. Redis数据结构统一为项目列表
  3. 所有相关代码与新数据结构兼容
  4. 文档和规范已更新
  5. 所有测试通过
  6. 代码符合项目规范
  7. 性能满足要求

📊 预期成果

  • 修复界面显示问题,移除测试假数据
  • 统一Redis数据结构提高可维护性
  • 完善测试覆盖,提高代码质量
  • 更新文档和规范,保持一致性
  • 提供完整的变更记录和测试报告