package task import ( "encoding/json" "modelRT/constants" "github.com/gofrs/uuid" ) // TaskQueueMessage defines minimal message structure for RabbitMQ/Redis queue dispatch type TaskQueueMessage struct { TaskID uuid.UUID `json:"task_id"` TaskType TaskType `json:"task_type"` Priority int `json:"priority,omitempty"` TraceCarrier map[string]string `json:"trace_carrier,omitempty"` Params map[string]any `json:"params,omitempty"` } func NewTaskQueueMessage(taskID uuid.UUID, taskType TaskType) *TaskQueueMessage { return &TaskQueueMessage{ TaskID: taskID, TaskType: taskType, Priority: constants.TaskPriorityDefault, } } func NewTaskQueueMessageWithPriority(taskID uuid.UUID, taskType TaskType, priority int) *TaskQueueMessage { return &TaskQueueMessage{ TaskID: taskID, TaskType: taskType, Priority: priority, } } func (m *TaskQueueMessage) ToJSON() ([]byte, error) { return json.Marshal(m) } func (m *TaskQueueMessage) Validate() bool { if m.TaskID == uuid.Nil { return false } switch m.TaskType { case TypeTopologyAnalysis, TypeEventAnalysis, TypeBatchImport, TypeTest: return true default: return false } } func (m *TaskQueueMessage) SetPriority(priority int) { if priority < constants.TaskPriorityLow { priority = constants.TaskPriorityLow } if priority > constants.TaskPriorityHigh { priority = constants.TaskPriorityHigh } m.Priority = priority } func (m *TaskQueueMessage) GetPriority() int { return m.Priority }