feat: 安全移除本地任务记录 (#108)
This commit is contained in:
@@ -152,6 +152,7 @@ CREATE TABLE pdd_tasks (
|
||||
received_at TEXT NOT NULL,
|
||||
started_at TEXT,
|
||||
finished_at TEXT,
|
||||
removed_at TEXT,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL
|
||||
);
|
||||
@@ -164,6 +165,9 @@ CREATE INDEX idx_pdd_tasks_status_type
|
||||
|
||||
CREATE INDEX idx_pdd_tasks_goods_id
|
||||
ON pdd_tasks(goods_id);
|
||||
|
||||
CREATE INDEX idx_pdd_tasks_visible_list
|
||||
ON pdd_tasks(removed_at, updated_at DESC, id DESC);
|
||||
```
|
||||
|
||||
### 字段语义
|
||||
@@ -176,6 +180,7 @@ CREATE INDEX idx_pdd_tasks_goods_id
|
||||
- `admin_payload`:`claim` 时收到的原始 Admin 任务 JSON,用于审计和向前兼容。
|
||||
- `pdd_data`:采集或采购结果 JSON,未产生结果时为空。
|
||||
- `received_at`:**领取时间**,即 `claim` 成功的时刻。
|
||||
- `removed_at`:用户把终态任务从普通列表移除的时间。为空表示正常显示;有值只表示隐藏,数据库记录和关联审计数据仍永久保留。
|
||||
- `updated_at`:本地更新时间,也是表格默认排序字段。
|
||||
|
||||
### 3.1 本地只存已领取任务
|
||||
@@ -196,7 +201,9 @@ CREATE INDEX idx_pdd_tasks_goods_id
|
||||
| `[必须]` 本地不保存 Admin 侧状态 | Client 拿到任务就做完,中途不查 Admin 怎么想。Admin 取消了、重派了,Client 一律不感知,照做完照提交,见 [04 接口契约](04-admin-api-contract.md) §1 |
|
||||
| `[必须]` 提交一定会被接受 | Admin 必须无条件接受已派发过的结果,见 [04](04-admin-api-contract.md) §6.1。所以本地不需要"提交被拒"的处理分支 |
|
||||
|
||||
**关于"永久保留":** 任务记录不设保留期,一直留着。但**诊断产物(截图、XML、长日志)仍然按
|
||||
**关于"永久保留":** 任务记录不设保留期,一直留着。界面上的“删除”只写入
|
||||
`removed_at`,不会执行 SQL `DELETE`,也不会删除 `task_runs` 或 `outbox_events`。
|
||||
但**诊断产物(截图、XML、长日志)仍然按
|
||||
`diagnostics.retention_days` 定期清理**——两者是不同的东西,别搞混。清理诊断文件不影响任务记录和审计字段。
|
||||
|
||||
数据量增长靠索引和增量加载扛(见 §3 的索引和 [05 界面规范](05-ui-specification.md) §5.3)。
|
||||
@@ -208,11 +215,16 @@ CREATE INDEX idx_pdd_tasks_goods_id
|
||||
SELECT id, remote_task_id, task_type, title, target_color, target_size,
|
||||
price_cent, quantity, status, updated_at
|
||||
FROM pdd_tasks
|
||||
WHERE /* 本地搜索与筛选条件 */
|
||||
WHERE removed_at IS NULL
|
||||
AND /* 本地搜索与筛选条件 */
|
||||
ORDER BY updated_at DESC, id DESC
|
||||
LIMIT :limit OFFSET :offset;
|
||||
```
|
||||
|
||||
批量软删除必须在一个事务内先校验全部勾选任务,再统一写入 `removed_at`。
|
||||
只允许 `succeeded`、`failed`、`cancelled`,且所有 Outbox 都已发送、所有执行记录的
|
||||
`irreversible_action_at` 都为空。任一任务不满足时整体失败,不能只隐藏其中一部分。
|
||||
|
||||
## 4. `task_runs`
|
||||
|
||||
每次自动执行或人工确认的重新采集都生成一条记录。任务再次执行时创建新的
|
||||
|
||||
Reference in New Issue
Block a user