mirror of
https://github.com/oarkflow/mq.git
synced 2025-10-05 16:06:55 +08:00
65 lines
1.7 KiB
Go
65 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
v2 "github.com/oarkflow/mq/dag/v2"
|
|
)
|
|
|
|
func NodeA(payload json.RawMessage) v2.Result {
|
|
var data map[string]any
|
|
if err := json.Unmarshal(payload, &data); err != nil {
|
|
return v2.Result{Error: err, Status: v2.StatusFailed}
|
|
}
|
|
data["allowed_voting"] = data["age"] == "18"
|
|
updatedPayload, _ := json.Marshal(data)
|
|
return v2.Result{Data: updatedPayload, Status: v2.StatusCompleted}
|
|
}
|
|
|
|
func NodeB(payload json.RawMessage) v2.Result {
|
|
var data map[string]any
|
|
if err := json.Unmarshal(payload, &data); err != nil {
|
|
return v2.Result{Error: err, Status: v2.StatusFailed}
|
|
}
|
|
data["female_voter"] = data["gender"] == "female"
|
|
updatedPayload, _ := json.Marshal(data)
|
|
return v2.Result{Data: updatedPayload, Status: v2.StatusCompleted}
|
|
}
|
|
|
|
func NodeC(payload json.RawMessage) v2.Result {
|
|
var data map[string]any
|
|
if err := json.Unmarshal(payload, &data); err != nil {
|
|
return v2.Result{Error: err, Status: v2.StatusFailed}
|
|
}
|
|
data["voted"] = true
|
|
updatedPayload, _ := json.Marshal(data)
|
|
return v2.Result{Data: updatedPayload, Status: v2.StatusCompleted}
|
|
}
|
|
|
|
func Result(payload json.RawMessage) v2.Result {
|
|
var data map[string]any
|
|
json.Unmarshal(payload, &data)
|
|
|
|
return v2.Result{Data: payload, Status: v2.StatusCompleted}
|
|
}
|
|
|
|
func notify(taskID string, result v2.Result) {
|
|
fmt.Printf("Final result for Task %s: %s\n", taskID, string(result.Data))
|
|
}
|
|
|
|
func main() {
|
|
dag := v2.NewDAG(notify)
|
|
dag.AddNode("NodeA", NodeA)
|
|
dag.AddNode("NodeB", NodeB)
|
|
dag.AddNode("NodeC", NodeC)
|
|
dag.AddNode("Result", Result)
|
|
dag.AddEdge("NodeA", "NodeB")
|
|
dag.AddEdge("NodeB", "NodeC")
|
|
dag.AddEdge("NodeC", "Result")
|
|
if dag.Error != nil {
|
|
panic(dag.Error)
|
|
}
|
|
dag.Start(":8080")
|
|
}
|