49 lines
2.9 KiB
Markdown
49 lines
2.9 KiB
Markdown
## MODIFIED Requirements
|
||
|
||
### Requirement: 新增共享类型
|
||
系统 SHALL 在 `src/shared/api.ts` 中定义 Dashboard 和 Metrics 相关共享类型。CheckResult SHALL 包含 durationMs(null | number)、failure(CheckFailure | null)、matched(boolean)、detail(null | string)、observation(Record<string, unknown> | null)、timestamp(string)。其中 detail 替代原 statusDetail 字段名。
|
||
|
||
#### Scenario: DashboardResponse 类型
|
||
- **WHEN** 前后端共享 `DashboardResponse` 类型
|
||
- **THEN** 该类型 SHALL 包含 summary 和 targets 字段
|
||
|
||
#### Scenario: TargetStatus 类型
|
||
- **WHEN** 前后端共享 `TargetStatus` 类型
|
||
- **THEN** 该类型 SHALL 包含目标基本信息字段(id、name、description、group、type、target、interval)、stats(totalChecks、upChecks、downChecks、availability)、currentStreak 和 recentSamples 字段,其中 name 和 description 类型均为 null 或字符串
|
||
|
||
#### Scenario: TargetMetricsResponse 类型
|
||
- **WHEN** 前后端共享 `TargetMetricsResponse` 类型
|
||
- **THEN** 该类型 SHALL 包含 targetId、window、stats 和 trend 字段
|
||
|
||
#### Scenario: TrendPoint 类型
|
||
- **WHEN** 前后端共享 `TrendPoint` 类型
|
||
- **THEN** 该类型 SHALL 包含 bucketStart、avgDurationMs、minDurationMs、maxDurationMs、availability、totalChecks、upChecks、downChecks 字段
|
||
|
||
#### Scenario: CheckResult 类型变更
|
||
- **WHEN** 前端或后端引用 CheckResult 类型
|
||
- **THEN** 该类型 SHALL 包含 `timestamp: string`、`matched: boolean`、`durationMs: number | null`、`detail: string | null`、`observation: Record<string, unknown> | null`、`failure` 字段,不包含 statusDetail 字段,不包含 success 字段
|
||
|
||
#### Scenario: RecentSample 类型
|
||
- **WHEN** 前后端共享 `RecentSample` 类型
|
||
- **THEN** 该类型 SHALL 包含 `timestamp: string`、`durationMs: number | null`、`up: boolean` 字段,其中 up 为 boolean 且等于 matched
|
||
|
||
#### Scenario: HistoryResponse 类型
|
||
- **WHEN** 前后端共享 `HistoryResponse` 类型
|
||
- **THEN** 该类型 SHALL 包含 `items: CheckResult[]`、`total: number`、`page: number`、`pageSize: number` 字段
|
||
|
||
#### Scenario: API 序列化构造 detail
|
||
- **WHEN** API 路由序列化 StoredCheckResult 为 API 响应
|
||
- **THEN** 系统 SHALL 从 StoredCheckResult 中反序列化 observation,根据 target type 通过 checkerRegistry 获取对应 checker 并调用 buildDetail(observation) 动态生成 detail 字段
|
||
|
||
#### Scenario: mapCheckResult 接收 type 参数
|
||
- **WHEN** 序列化辅助函数 mapCheckResult 被调用
|
||
- **THEN** 函数 SHALL 接收 target type 参数,用于从 registry 获取对应 checker 调用 buildDetail
|
||
|
||
#### Scenario: Dashboard API 传递 type
|
||
- **WHEN** Dashboard 路由序列化 latestCheck
|
||
- **THEN** 路由 SHALL 将 target.type 传递给 mapCheckResult
|
||
|
||
#### Scenario: History API 传递 type
|
||
- **WHEN** History 路由序列化历史记录列表
|
||
- **THEN** 路由 SHALL 将已查询的 target.type 传递给 mapCheckResult
|