Files
mq/handlers/common_handler.go
2025-08-11 12:58:16 +05:45

62 lines
1.4 KiB
Go

package handlers
import (
"context"
"fmt"
"github.com/oarkflow/mq"
"github.com/oarkflow/mq/dag"
)
type Loop struct {
dag.Operation
}
func (e *Loop) ProcessTask(ctx context.Context, task *mq.Task) mq.Result {
fmt.Println("Loop Data")
return mq.Result{Payload: task.Payload, Ctx: ctx}
}
func NewLoop(id string) *Loop {
return &Loop{
Operation: dag.Operation{ID: id, Key: "loop", Type: dag.Function, Tags: []string{"built-in"}},
}
}
var defaultKey = "default"
type Condition struct {
dag.Operation
conditions map[string]dag.Condition
}
func (e *Condition) SetConditions(conditions map[string]dag.Condition) {
e.conditions = conditions
}
func (e *Condition) ProcessTask(ctx context.Context, task *mq.Task) mq.Result {
data, err := dag.UnmarshalPayload[map[string]any](ctx, task.Payload)
if err != nil {
return mq.Result{Error: err, Ctx: ctx}
}
var conditionStatus string
_, ok := e.conditions[defaultKey]
for status, condition := range e.conditions {
if status != defaultKey && condition != nil {
if condition.Match(data) {
conditionStatus = status
}
}
}
if conditionStatus == "" && ok {
conditionStatus = defaultKey
}
return mq.Result{Payload: task.Payload, ConditionStatus: conditionStatus, Ctx: ctx}
}
func NewCondition(id string) *Condition {
return &Condition{
Operation: dag.Operation{ID: id, Key: "condition", Type: dag.Function, Tags: []string{"built-in"}},
}
}