Files
mq/examples/tasks/operations.go
2024-10-22 10:08:18 +05:45

147 lines
3.2 KiB
Go

package tasks
import (
"context"
"github.com/oarkflow/json"
"github.com/oarkflow/dipper"
"github.com/oarkflow/mq"
"github.com/oarkflow/mq/services"
)
type GetData struct {
services.Operation
}
func (e *GetData) ProcessTask(ctx context.Context, task *mq.Task) mq.Result {
return mq.Result{Payload: task.Payload, Ctx: ctx}
}
type Loop struct {
services.Operation
}
func (e *Loop) ProcessTask(ctx context.Context, task *mq.Task) mq.Result {
return mq.Result{Payload: task.Payload, Ctx: ctx}
}
type Condition struct {
services.Operation
}
func (e *Condition) ProcessTask(ctx context.Context, task *mq.Task) mq.Result {
var data map[string]any
err := json.Unmarshal(task.Payload, &data)
if err != nil {
panic(err)
}
switch email := data["email"].(type) {
case string:
if email == "abc.xyz@gmail.com" {
return mq.Result{Payload: task.Payload, Status: "pass", Ctx: ctx}
}
return mq.Result{Payload: task.Payload, Status: "fail", Ctx: ctx}
default:
return mq.Result{Payload: task.Payload, Status: "fail", Ctx: ctx}
}
}
type PrepareEmail struct {
services.Operation
}
func (e *PrepareEmail) ProcessTask(ctx context.Context, task *mq.Task) mq.Result {
var data map[string]any
err := json.Unmarshal(task.Payload, &data)
if err != nil {
panic(err)
}
data["email_valid"] = true
d, _ := json.Marshal(data)
return mq.Result{Payload: d, Ctx: ctx}
}
type EmailDelivery struct {
services.Operation
}
func (e *EmailDelivery) ProcessTask(ctx context.Context, task *mq.Task) mq.Result {
var data map[string]any
err := json.Unmarshal(task.Payload, &data)
if err != nil {
panic(err)
}
return mq.Result{Payload: task.Payload, Ctx: ctx}
}
type SendSms struct {
services.Operation
}
func (e *SendSms) ProcessTask(ctx context.Context, task *mq.Task) mq.Result {
var data map[string]any
err := json.Unmarshal(task.Payload, &data)
if err != nil {
panic(err)
}
return mq.Result{Payload: task.Payload, Error: nil, Ctx: ctx}
}
type StoreData struct {
services.Operation
}
func (e *StoreData) ProcessTask(ctx context.Context, task *mq.Task) mq.Result {
return mq.Result{Payload: task.Payload, Ctx: ctx}
}
type InAppNotification struct {
services.Operation
}
func (e *InAppNotification) ProcessTask(ctx context.Context, task *mq.Task) mq.Result {
var data map[string]any
err := json.Unmarshal(task.Payload, &data)
if err != nil {
panic(err)
}
return mq.Result{Payload: task.Payload, Ctx: ctx}
}
type DataBranchHandler struct{ services.Operation }
func (v *DataBranchHandler) ProcessTask(ctx context.Context, task *mq.Task) mq.Result {
ctx = context.WithValue(ctx, "extra_params", map[string]any{"iphone": true})
var row map[string]any
var result mq.Result
result.Payload = task.Payload
err := json.Unmarshal(result.Payload, &row)
if err != nil {
result.Error = err
return result
}
b := make(map[string]any)
switch branches := row["data_branch"].(type) {
case map[string]any:
for field, handler := range branches {
data, err := dipper.Get(row, field)
if err != nil {
break
}
b[handler.(string)] = data
}
break
}
br, err := json.Marshal(b)
if err != nil {
result.Error = err
return result
}
result.Status = "branches"
result.Payload = br
result.Ctx = ctx
return result
}