feat(shared): A6 任务协议契约、任务数据模型与系统配置
背景:A6 任务中心需要统一任务协议(九态状态机 / 队列映射 / SSE 事件)与任务落库模型,供 API、worker 与前端共用,避免各端自建枚举。
改动:
- 新增 packages/shared/src/tasks/task-protocol.ts:任务类型、架构 §3.6 九态与允许迁移、5 组 9 队列定义、Outbox/SSE 事件、进度与收敛纯函数;
- 新增 packages/shared/src/schemas/tasks.ts:提交/列表/详情/取消/重试/SSE 的 Zod DTO(body camelCase、query snake_case,列表 { items, next_cursor });
- system_configs 新增 task 分组(演练上限 20 项 / 单条成本 0.02 元 / 单条时长 3 秒),seed 按定义幂等;
- Prisma 新增 media_tasks / media_items / task_events 三表与迁移 20261104125003_a6_media_tasks(expand-only,不改旧表)。
影响面:仅新增 shared 导出、配置项与三张新表,旧接口与旧表不受影响。
回滚:撤销提交,并对三张新表执行 prisma migrate resolve/删除(无业务数据)。
验证:shared 197 tests 全绿;typecheck / lint / format:check 全绿;prisma migrate status up to date。
This commit is contained in:
1 parent
b505dfe5e3
commit
4a29cf815e
8 files changed
+1267
No files matched your search
@@ -13,6 +13,7 @@ export const SYSTEM_CONFIG_GROUP_KEYS = [
|
||||
'notify',
|
||||
'limits',
|
||||
'threshold',
|
||||
'task',
|
||||
'audit',
|
||||
] as const;
|
||||
|
||||
@@ -45,6 +46,12 @@ export const SYSTEM_CONFIG_GROUPS: readonly {
|
||||
description: '爆量判定、审核超时与质量告警',
|
||||
sortOrder: 60,
|
||||
},
|
||||
{
|
||||
key: 'task',
|
||||
name: '任务与预估',
|
||||
description: '演练任务项上限与提交时的成本 / 时长预估(A6)',
|
||||
sortOrder: 65,
|
||||
},
|
||||
{
|
||||
key: 'audit',
|
||||
name: '审计与日志',
|
||||
@@ -459,6 +466,54 @@ export const SYSTEM_CONFIG_DEFINITIONS: readonly SystemConfigDefinition[] = [
|
||||
sortOrder: 260,
|
||||
},
|
||||
|
||||
// 任务与预估(A6)
|
||||
{
|
||||
key: 'task.demo.max_items',
|
||||
group: 'task',
|
||||
label: '演练任务项上限',
|
||||
description: '单次演练任务最多包含的任务项数量;硬上限 100 由提交 schema 兜底',
|
||||
impact: '影响任务提交校验(超限 40001)与预估条数;修改后新提交生效,历史任务不受影响',
|
||||
type: 'number',
|
||||
defaultValue: 20,
|
||||
unit: '项',
|
||||
min: 1,
|
||||
max: 100,
|
||||
editable: true,
|
||||
public: true,
|
||||
sortOrder: 265,
|
||||
},
|
||||
{
|
||||
key: 'task.estimate.demo_cost_per_item',
|
||||
group: 'task',
|
||||
label: '演练任务单项预估成本',
|
||||
description: '提交演练任务时每个任务项的预估成本(元);仅用于返回 estimatedCost',
|
||||
impact: '仅影响提交响应的预估金额,不产生真实计费;缺失时提交被拒绝(40001)',
|
||||
type: 'number',
|
||||
defaultValue: 0.02,
|
||||
unit: '元/项',
|
||||
min: 0,
|
||||
max: 100,
|
||||
step: 0.01,
|
||||
editable: true,
|
||||
public: false,
|
||||
sortOrder: 270,
|
||||
},
|
||||
{
|
||||
key: 'task.estimate.demo_seconds_per_item',
|
||||
group: 'task',
|
||||
label: '演练任务单项预估耗时',
|
||||
description: '提交演练任务时每个任务项的预估耗时(秒);仅用于返回 estimatedSeconds',
|
||||
impact: '仅影响提交响应的预估时长,实际耗时以 worker 执行结果为准;缺失时提交被拒绝(40001)',
|
||||
type: 'number',
|
||||
defaultValue: 3,
|
||||
unit: '秒/项',
|
||||
min: 1,
|
||||
max: 3600,
|
||||
editable: true,
|
||||
public: false,
|
||||
sortOrder: 275,
|
||||
},
|
||||
|
||||
// 审计与日志(A5)
|
||||
{
|
||||
key: 'audit.retention_months',
|
||||
|
||||
Reference in new issue
Block a user