42 lines
2.3 KiB
Markdown
42 lines
2.3 KiB
Markdown
## MODIFIED Requirements
|
||
|
||
### Requirement: SQLite 数据库初始化
|
||
系统 SHALL 使用 Bun 内置 `bun:sqlite` 模块在配置的数据目录下创建 SQLite 数据库文件,并以 WAL 模式运行。数据库 schema MUST 支持 typed checker target 和结构化检查结果,targets 表 MUST 包含 `grp` 列存储分组信息,且 targets 表的 `name` 和 `description` 列 MUST 允许 NULL。
|
||
|
||
#### Scenario: 首次启动创建数据库
|
||
- **WHEN** 指定的数据目录下不存在数据库文件
|
||
- **THEN** 系统 SHALL 创建数据库文件并初始化 targets 表和 check_results 表,check_results 表包含 id(INTEGER PRIMARY KEY AUTOINCREMENT)、target_id(TEXT NOT NULL)、timestamp(TEXT NOT NULL)、matched(INTEGER NOT NULL)、duration_ms(REAL)、observation(TEXT)、failure(TEXT),不包含 status_detail 列,不包含 success 列
|
||
|
||
#### Scenario: targets name 列允许 NULL
|
||
- **WHEN** 系统首次创建 targets 表
|
||
- **THEN** targets.name 列 SHALL 允许存储 NULL
|
||
|
||
#### Scenario: 数据目录不存在
|
||
- **WHEN** 配置的数据目录路径不存在
|
||
- **THEN** 系统 SHALL 自动创建该目录
|
||
|
||
#### Scenario: 数据库已存在时启动
|
||
- **WHEN** 数据库文件已存在
|
||
- **THEN** 系统 SHALL 直接打开数据库,不重新建表
|
||
|
||
#### Scenario: 外键约束
|
||
- **THEN** 系统 SHALL 启用 `PRAGMA foreign_keys = ON`
|
||
|
||
#### Scenario: 级联删除
|
||
- **THEN** check_results 表的外键约束 SHALL 使用 `ON DELETE CASCADE`,确保删除目标时自动清理关联结果记录
|
||
|
||
### Requirement: check_results 表追加写入
|
||
系统 SHALL 将每次检查结果追加写入 check_results 表,不更新或删除已有记录。
|
||
|
||
#### Scenario: 写入检查结果
|
||
- **WHEN** 一次 checker 执行完成
|
||
- **THEN** 系统 SHALL 插入一条包含 target_id、timestamp、matched、duration_ms、observation、failure 的记录,其中 observation 使用 JSON.stringify 序列化为 TEXT
|
||
|
||
#### Scenario: 查询检查结果
|
||
- **WHEN** 系统查询 latest check 或历史 check_results
|
||
- **THEN** 存储层 SHALL 返回 observation 字段而非 status_detail 字段,供 API 序列化层反序列化并构造 detail
|
||
|
||
#### Scenario: 写入结构化失败信息
|
||
- **WHEN** checker 执行失败或 expect 不匹配
|
||
- **THEN** 系统 SHALL 将首个失败原因序列化写入 failure 字段
|