- 将AI模型相关端点、命令、处理器移动到模块内部统一管理 - 优化数据库迁移脚本,添加对不同环境表状态的兼容处理逻辑 - 为异常处理添加错误码枚举参数,统一错误处理方式 - 重构多处业务逻辑中的异常抛出方式,增强代码一致性 - 移除独立的组件清单分组和项目定义,简化前端物料面板数据结构 - 修复测试代码中实体引用路径错误问题 - 添加新的监控模块测试项目到解决方案文件中
6.2 KiB
U号租登录后订单列表 Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: 用户完成 u号租腾讯验证码登录后,系统立即同步订单,并在外部系统详情页分页展示已同步订单。
Architecture: 复用现有 UHaoZuLoginService -> SyncProcessor -> b_synced_records 数据链路,不新增订单表。Monitoring Application 新增只读分页 Query,BuildFlow.Host 新增 Endpoint;前端详情页通过 VxeGrid 查询并展示订单,未知业务字段保留在原始 Payload 中。
Tech Stack: .NET 10、EF Core、MediatR、FastEndpoints、xUnit、Vue 3、TypeScript、Vben VxeGrid、Vitest。
Task 1: 建立 Monitoring 测试项目并为订单分页查询写失败测试
Files:
-
Create:
tests/BuildFlow.Monitoring.Tests/BuildFlow.Monitoring.Tests.csproj -
Create:
tests/BuildFlow.Monitoring.Tests/MonitoringTestDb.cs -
Create:
tests/BuildFlow.Monitoring.Tests/Reports/GetOrderRecordsQueryHandlerTests.cs -
Modify:
BuildFlow.slnx -
创建测试项目,引用 Monitoring Application/Infrastructure,并使用仓库现有版本的 xUnit、FluentAssertions 和 EF Core InMemory。
-
写失败测试:两个系统、三条 order、一条非 order;断言只返回目标系统的 order,按发生时间倒序分页。
-
运行
dotnet test tests/BuildFlow.Monitoring.Tests/BuildFlow.Monitoring.Tests.csproj --no-restore,确认因缺少 Query/DTO/Handler 而失败。
测试核心断言:
var result = await handler.Handle(new GetOrderRecordsQuery(systemId, 1, 2), default);
result.Total.Should().Be(3);
result.Items.Select(x => x.ExternalId).Should().Equal("order-3", "order-2");
Task 2: 实现订单分页 Query 和 HTTP Endpoint
Files:
-
Create:
src/modules/monitoring/Application/Reports/DTOs/OrderRecordDto.cs -
Create:
src/modules/monitoring/Application/Reports/DTOs/OrderRecordPageDto.cs -
Create:
src/modules/monitoring/Application/Reports/Queries/GetOrderRecordsQuery.cs -
Create:
src/modules/monitoring/Application/Reports/Handlers/GetOrderRecordsQueryHandler.cs -
Create:
src/BuildFlow.Host/Endpoints/Monitoring/GetOrderRecordsRequest.cs -
Create:
src/BuildFlow.Host/Endpoints/Monitoring/GetOrderRecordsRequestValidator.cs -
Create:
src/BuildFlow.Host/Endpoints/Monitoring/GetOrderRecordsEndpoint.cs -
创建一文件一类型 DTO:订单记录包含
Id、ExternalSystemId、ExternalId、UTC 毫秒时间戳OccurredAt和Payload;分页 DTO 包含Items/Total/PageIndex/PageSize。 -
Handler 先校验系统存在,再过滤
ExternalSystemId与RecordType == "order",按OccurredAt、UpdatedAt倒序分页;物化后读取Data.Payload。 -
Endpoint 使用
GET /monitoring/systems/{systemId}/orders和monitoring.view权限。 -
Validator 要求
PageIndex > 0,PageSize在 1 到 100 之间。 -
运行 Monitoring 测试并确认 GREEN。
Task 3: 补齐登录请求校验并收敛敏感日志
Files:
-
Create:
src/BuildFlow.Host/Endpoints/Monitoring/LoginExternalSystemRequestValidator.cs -
Create:
src/modules/monitoring/Infrastructure/Connectors/UHaoZuLoginPayloadFactory.cs -
Modify:
src/modules/monitoring/Infrastructure/Connectors/UHaoZuLoginService.cs -
Create:
tests/BuildFlow.Monitoring.Tests/ExternalSystems/LoginExternalSystemRequestValidatorTests.cs -
Create:
tests/BuildFlow.Monitoring.Tests/Connectors/UHaoZuLoginPayloadFactoryTests.cs -
写失败测试:空账号、密码、ticket、randstr 被拒绝;密码
321生成caf1a3dfb505ffed0d024130f58c5cfa,票据字段为verificationCode.randStr。 -
实现 Validator 和 Payload Factory,登录服务复用工厂。
-
日志只记录 HTTP 状态、业务响应码和 Cookie 名称数量,不记录响应体、密码、票据、Cookie 值或原始
Set-Cookie。 -
无
Set-Cookie时使用TryGetValues,避免二次异常。 -
运行 Monitoring 测试并确认 GREEN。
Task 4: 前端订单 API、展示模型和详情页表格
Files:
-
Modify:
build-flow.web/apps/web-antdv-next/src/api/core/monitoring.ts -
Create:
build-flow.web/apps/web-antdv-next/src/views/monitoring/detail/order-record.ts -
Create:
build-flow.web/apps/web-antdv-next/src/views/monitoring/detail/order-record.test.ts -
Modify:
build-flow.web/apps/web-antdv-next/src/views/monitoring/detail/index.vue -
Create:
build-flow.web/apps/web-antdv-next/src/views/monitoring/systems/modules/uhaozu-captcha.ts -
Create:
build-flow.web/apps/web-antdv-next/src/views/monitoring/systems/modules/uhaozu-captcha.test.ts -
Modify:
build-flow.web/apps/web-antdv-next/src/views/monitoring/systems/modules/credential-form.vue -
先写失败测试:订单展示模型从 Payload 提取订单号、状态、商品/账号、金额、租期并提供兜底;验证码编排覆盖成功和取消。
-
运行
../../node_modules/.bin/vitest run --dom src/views/monitoring/detail/order-record.test.ts src/views/monitoring/systems/modules/uhaozu-captcha.test.ts,确认 RED。 -
新增
MonitoringApi.OrderRecord、OrderRecordPage和getMonitoringOrdersApi()。 -
详情页增加服务端分页 VxeGrid,列为订单号、状态、商品/账号、实付金额、租期、下单时间;手动同步后刷新订单表。
-
credential-form.vue使用可测试的requestUHaoZuCaptcha(),仍只调用腾讯原生验证码,不识别或自动点击。 -
运行两个前端测试文件并确认 GREEN。
Task 5: 完整验证
Files:
-
Verify only
-
运行
dotnet test tests/BuildFlow.Monitoring.Tests/BuildFlow.Monitoring.Tests.csproj --no-restore。 -
运行
dotnet build BuildFlow.slnx --no-restore,要求 0 warning / 0 error。 -
运行前端两个目标 Vitest、
vue-tsc --noEmit --skipLibCheck和vite build --mode production。 -
浏览器确认
TencentCaptcha(192192826)仍渲染真实弹窗;用 mock API 验证订单表格非空且布局稳定。 -
检查没有新增数据库表或 Migration,没有敏感凭证日志,没有覆盖用户其他修改。