new
This commit is contained in:
68
internal/infrastructure/task/entities/async_task.go
Normal file
68
internal/infrastructure/task/entities/async_task.go
Normal file
@@ -0,0 +1,68 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user