package main import ( "encoding/json" "fmt" "github.com/oarkflow/mq/dag/v2" ) func main() { graph := v2.NewGraph() customRegistrationNode := &v2.Operation{ Type: "page", ID: "customRegistration", Content: `

Custom Registration




`, } checkValidityNode := &v2.Operation{ Type: "process", ID: "checkValidity", Func: func(task *v2.Task) v2.Result { var inputs map[string]string if err := json.Unmarshal(task.Payload, &inputs); err != nil { return v2.Result{ConditionStatus: "customRegistration", Error: fmt.Errorf("Invalid input format")} } email, phone := inputs["email"], inputs["phone"] if !isValidEmail(email) || !isValidPhone(phone) { return v2.Result{ ConditionStatus: "customRegistration", Error: fmt.Errorf("Invalid email or phone number. Please try again."), } } return v2.Result{ConditionStatus: "checkManualVerification"} }, } checkManualVerificationNode := &v2.Operation{ Type: "process", ID: "checkManualVerification", Func: func(task *v2.Task) v2.Result { var inputs map[string]string if err := json.Unmarshal(task.Payload, &inputs); err != nil { return v2.Result{ConditionStatus: "customRegistration", Error: fmt.Errorf("Invalid input format")} } city := inputs["city"] if city != "Kathmandu" { return v2.Result{ConditionStatus: "manualVerificationPage"} } return v2.Result{ConditionStatus: "approveCustomer"} }, } approveCustomerNode := &v2.Operation{ Type: "process", ID: "approveCustomer", Func: func(task *v2.Task) v2.Result { task.FinalResult = "Customer approved" return v2.Result{} }, } sendVerificationEmailNode := &v2.Operation{ Type: "process", ID: "sendVerificationEmail", Func: func(task *v2.Task) v2.Result { return v2.Result{} }, } verificationLinkPageNode := &v2.Operation{ Type: "page", ID: "verificationLinkPage", Content: `

Verify Email

Click here to verify your email

Verify`, } dashboardNode := &v2.Operation{ Type: "page", ID: "dashboard", Content: `

Dashboard

Welcome to your dashboard!

`, } manualVerificationNode := &v2.Operation{ Type: "page", ID: "manualVerificationPage", Content: `

Manual Verification

Please verify the user's information manually.

`, } verifyApprovedNode := &v2.Operation{ Type: "process", ID: "verifyApproved", Func: func(task *v2.Task) v2.Result { return v2.Result{} }, } denyVerificationNode := &v2.Operation{ Type: "process", ID: "denyVerification", Func: func(task *v2.Task) v2.Result { task.FinalResult = "Verification Denied" return v2.Result{} }, } graph.AddNode(customRegistrationNode) graph.AddNode(checkValidityNode) graph.AddNode(checkManualVerificationNode) graph.AddNode(approveCustomerNode) graph.AddNode(sendVerificationEmailNode) graph.AddNode(verificationLinkPageNode) graph.AddNode(dashboardNode) graph.AddNode(manualVerificationNode) graph.AddNode(verifyApprovedNode) graph.AddNode(denyVerificationNode) graph.AddEdge("customRegistration", "checkValidity") graph.AddEdge("checkValidity", "checkManualVerification") graph.AddEdge("checkManualVerification", "approveCustomer") graph.AddEdge("checkManualVerification", "manualVerificationPage") graph.AddEdge("approveCustomer", "sendVerificationEmail") graph.AddEdge("sendVerificationEmail", "verificationLinkPage") graph.AddEdge("verificationLinkPage", "dashboard") graph.AddEdge("manualVerificationPage", "verifyApproved") graph.AddEdge("manualVerificationPage", "denyVerification") graph.AddEdge("verifyApproved", "approveCustomer") graph.AddEdge("denyVerification", "verificationLinkPage") graph.Start() } func isValidEmail(email string) bool { return email != "" } func isValidPhone(phone string) bool { return phone != "" }