package model import ( "time" core "git.yuntuo.hk/k2safe/orbit/model" ) // Task 表示任务主记录,执行尝试另存历史,终态不自动回退。 // 对应表 pulse_tasks;这是服务端持久化模型,不直接作为 API 响应。 type Task struct { // Record 包含命名空间、记录标识、并发版本和 UTC 时间。 core.Record // QueueID 任务所属队列,必须属于同一命名空间。 QueueID core.ID `db:"queue_id"` // GateID 可选执行门控;为空表示没有流程级门控,仍受队列与权限控制。 GateID *core.ID `db:"gate_id"` // State 任务状态;与执行尝试状态分开,未知业务效果进入待核查。 State TaskState `db:"state"` // Handler 业务 Worker 注册的处理器名称。 Handler string `db:"handler"` // HandlerVersion 处理器兼容版本,受理后不得静默替换。 HandlerVersion string `db:"handler_version"` // PayloadVersion 输入参数的解释版本。 PayloadVersion string `db:"payload_version"` // Payload 版本化输入或事件内容;仅承载通用 JSON,不解释行业规则。 Payload core.JSON `db:"payload"` // Result 已保存的结果或结果引用 JSON;未取得结果时为空。 Result core.JSON `db:"result"` // EffectUncertain 曾有已授权执行的效果尚未核实;重试/超时不能清除,仅权威成功或后续核查可解除。 EffectUncertain bool `db:"effect_uncertain"` // PolicySnapshot 受理时冻结的实际生效策略 JSON。 PolicySnapshot core.JSON `db:"policy_snapshot"` // RecoverySafety 恢复安全等级;未知值按需要核查处理,不能默认自动重跑。 RecoverySafety RecoverySafety `db:"recovery_safety"` // BusinessKey 业务侧关联键,用于检索追踪,不自动提供业务幂等;可为空,表示尚未设置该关联或值。 BusinessKey *string `db:"business_key"` // ConcurrencyKey 显式互斥资源键,命名空间内跨队列共享;空表示不启用。 ConcurrencyKey *string `db:"concurrency_key"` // ConcurrencyKeyDigest 资源键精确 UTF-8 字节的域分隔摘要,与键同时为空或非空。 ConcurrencyKeyDigest *core.Digest `db:"concurrency_key_digest"` // OwnerKind 来源资源类型,例如流程激活;为空表示无来源关联。 OwnerKind *string `db:"owner_kind"` // OwnerID 来源资源标识,必须与来源类型同时有值或同时为空。 OwnerID *core.ID `db:"owner_id"` // Priority 冻结优先级,0至9,每级30秒排序优势;不提前最早执行时间。 Priority int16 `db:"priority"` // DispatchAt 数据库生成的排序时间,AvailableAt 减 Priority 乘30秒;只读,不是执行授权。 DispatchAt time.Time `db:"dispatch_at"` // AvailableAt 最早可被领取或处理的时间,统一 UTC。 AvailableAt time.Time `db:"available_at"` // StartDeadlineAt 最晚允许新尝试开始的时间;为空时仅受总时限约束。 StartDeadlineAt *time.Time `db:"start_deadline_at"` // DeadlineAt 总截止时间,统一 UTC;到期不能证明外部业务没有生效。 DeadlineAt time.Time `db:"deadline_at"` // AttemptTimeoutMS 单次尝试的超时时长,单位毫秒。 AttemptTimeoutMS uint64 `db:"attempt_timeout_ms"` // MaxAttempts 最多执行尝试数,包含首次尝试。 MaxAttempts uint32 `db:"max_attempts"` // AttemptCount 已产生的执行尝试数,恢复时不得重置。 AttemptCount uint32 `db:"attempt_count"` // CurrentAttemptID 当前关联的执行尝试,必须属于本任务;可为空,表示尚未设置该关联或值。 CurrentAttemptID *core.ID `db:"current_attempt_id"` // LeaseEpoch 递增的执行或消费代次,用于隔离旧授权。 LeaseEpoch uint64 `db:"lease_epoch"` // LeaseUntil 当前执行授权截止时间;没有有效授权时为空。 LeaseUntil *time.Time `db:"lease_until"` // CancelRequestedAt 取消意图的持久化时间;不等于取消已完成;可为空,表示尚未设置该关联或值。 CancelRequestedAt *time.Time `db:"cancel_requested_at"` // RetryOf 人工重试的原任务标识,同命名空间每个原任务最多一个直接后继;为空表示非人工派生。 RetryOf *core.ID `db:"retry_of"` // CompletedAt 终结时间;非终态为空,进入终态时必须写入。 CompletedAt *time.Time `db:"completed_at"` } func (Task) TableName() string { return "pulse_tasks" }