Files
tyapi-server/internal/infrastructure/task/entities/async_task.go
2025-09-12 01:15:09 +08:00

68 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}