package model import ( "time" core "git.yuntuo.hk/k2safe/orbit/model" ) // Attempt 表示一次任务执行尝试,保存租约、授权代次与独立结果。 // 对应表 pulse_attempts;这是服务端持久化模型,不直接作为 API 响应。 type Attempt struct { // ConcurrencyToken 资源键的单调许可序号;零表示未启用,重连保留,新尝试递增。 ConcurrencyToken uint64 `db:"concurrency_token"` // Record 包含命名空间、记录标识、并发版本和 UTC 时间。 core.Record // TaskID 关联的 Pulse 任务标识。 TaskID core.ID `db:"task_id"` // Epoch 该任务的授权代次,同一任务内唯一且递增。 Epoch uint64 `db:"epoch"` // SessionID 当前执行归属的 Worker 会话标识。 SessionID core.ID `db:"session_id"` // TokenDigest 执行秘密令牌的 SHA-256 摘要,不输出原令牌。 TokenDigest core.Digest `db:"token_digest"` // State 当前执行尝试的状态,不能代替整个任务的状态。 State AttemptState `db:"state"` // LeaseUntil 已确认的租约截止时间,必须用数据库时间核验。 LeaseUntil time.Time `db:"lease_until"` // AuthorizedAt 平台允许处理器开始的时间;不能证明业务副作用已经发生;可为空,表示尚未设置该关联或值。 AuthorizedAt *time.Time `db:"authorized_at"` // EndedAt 本次尝试结束时间;尚未结束时为空。 EndedAt *time.Time `db:"ended_at"` // ErrorCode 稳定错误分类,供恢复策略判断;不得写入敏感原始错误;可为空,表示尚未设置该关联或值。 ErrorCode *string `db:"error_code"` // Retryable Worker 对明确失败声明可安全重试;只用于 FAILED,不证明未知效果安全。 Retryable bool `db:"retryable"` // Result 已保存的结果或结果引用 JSON;未取得结果时为空。 Result core.JSON `db:"result"` // ResultDigest 结果语义摘要,用于识别确认重报与冲突结果;可为空,表示尚未设置该关联或值。 ResultDigest *core.Digest `db:"result_digest"` } func (Attempt) TableName() string { return "pulse_attempts" }