Files
mq/examples/dag_v2.go
2024-10-08 16:10:38 +05:45

78 lines
2.0 KiB
Go

package main
import (
"context"
"encoding/json"
"fmt"
"github.com/oarkflow/mq/v2"
)
func handler1(ctx context.Context, task *v2.Task) v2.Result {
return v2.Result{Payload: task.Payload, Ctx: ctx}
}
func handler2(ctx context.Context, task *v2.Task) v2.Result {
var user map[string]any
json.Unmarshal(task.Payload, &user)
return v2.Result{Payload: task.Payload, Ctx: ctx}
}
func handler3(ctx context.Context, task *v2.Task) v2.Result {
var user map[string]any
json.Unmarshal(task.Payload, &user)
age := int(user["age"].(float64))
status := "FAIL"
if age > 20 {
status = "PASS"
}
user["status"] = status
resultPayload, _ := json.Marshal(user)
return v2.Result{Payload: resultPayload, Status: status, Ctx: ctx}
}
func handler4(ctx context.Context, task *v2.Task) v2.Result {
var user map[string]any
json.Unmarshal(task.Payload, &user)
user["final"] = "D"
resultPayload, _ := json.Marshal(user)
return v2.Result{Payload: resultPayload, Ctx: ctx}
}
func handler5(ctx context.Context, task *v2.Task) v2.Result {
var user map[string]any
json.Unmarshal(task.Payload, &user)
user["salary"] = "E"
resultPayload, _ := json.Marshal(user)
return v2.Result{Payload: resultPayload, Ctx: ctx}
}
func handler6(ctx context.Context, task *v2.Task) v2.Result {
var user map[string]any
json.Unmarshal(task.Payload, &user)
resultPayload, _ := json.Marshal(map[string]any{"storage": user})
return v2.Result{Payload: resultPayload, Ctx: ctx}
}
func main() {
dag := v2.NewDAG()
dag.AddNode("A", handler1)
dag.AddNode("B", handler2)
dag.AddNode("C", handler3)
dag.AddNode("D", handler4)
dag.AddNode("E", handler5)
dag.AddNode("F", handler6)
dag.AddEdge("A", "B", v2.LoopEdge)
dag.AddCondition("C", map[string]string{"PASS": "D", "FAIL": "E"})
dag.AddEdge("B", "C")
dag.AddEdge("D", "F")
dag.AddEdge("E", "F")
initialPayload, _ := json.Marshal([]map[string]any{
{"user_id": 1, "age": 12},
{"user_id": 2, "age": 34},
})
rs := dag.ProcessTask(context.Background(), "A", initialPayload)
fmt.Println(string(rs.Payload))
}