package entities import ( "time" "github.com/google/uuid" "gorm.io/gorm" ) // TaskStatus 任务状态 type TaskStatus string const ( TaskStatusPending TaskStatus = "pending" TaskStatusRunning TaskStatus = "running" TaskStatusCompleted TaskStatus = "completed" TaskStatusFailed TaskStatus = "failed" TaskStatusCancelled TaskStatus = "cancelled" ) // AsyncTask 异步任务实体 type AsyncTask struct { ID string `gorm:"type:char(36);primaryKey"` Type string `gorm:"not null;index"` Payload string `gorm:"type:text"` Status TaskStatus `gorm:"not null;index"` ScheduledAt *time.Time `gorm:"index"` StartedAt *time.Time CompletedAt *time.Time ErrorMsg string RetryCount int `gorm:"default:0"` MaxRetries int `gorm:"default:5"` CreatedAt time.Time UpdatedAt time.Time } // TableName 指定表名 func (AsyncTask) TableName() string { return "async_tasks" } // BeforeCreate GORM钩子,在创建前生成UUID func (t *AsyncTask) BeforeCreate(tx *gorm.DB) error { if t.ID == "" { t.ID = uuid.New().String() } return nil } // IsCompleted 检查任务是否已完成 func (t *AsyncTask) IsCompleted() bool { return t.Status == TaskStatusCompleted } // IsFailed 检查任务是否失败 func (t *AsyncTask) IsFailed() bool { return t.Status == TaskStatusFailed } // IsCancelled 检查任务是否已取消 func (t *AsyncTask) IsCancelled() bool { return t.Status == TaskStatusCancelled } // CanRetry 检查任务是否可以重试 func (t *AsyncTask) CanRetry() bool { return t.Status == TaskStatusFailed && t.RetryCount < t.MaxRetries }