Basic
The simplest Turbine workflow — register a function and call it from an HTTP endpoint.
What to notice:
turbine.Setuphooks into PocketBase's lifecycle — no manualLaunch/Shutdown- Workflow signature:
func(ctx turbine.Context, input P) (R, error) handle.GetResult()blocks until the workflow completes
go
package main
import (
"log"
"github.com/YakirOren/turbine"
"github.com/pocketbase/pocketbase"
"github.com/pocketbase/pocketbase/core"
)
func Greet(ctx turbine.Context, name string) (string, error) {
return "hello " + name, nil
}
func main() {
app := pocketbase.New()
rt := turbine.Setup(app, turbine.Config{})
turbine.Register(rt, Greet)
app.OnServe().BindFunc(func(e *core.ServeEvent) error {
e.Router.POST("/greet/{name}", func(re *core.RequestEvent) error {
name := re.Request.PathValue("name")
handle, err := turbine.Run(rt, Greet, name)
if err != nil {
return re.JSON(500, map[string]string{"error": err.Error()})
}
result, err := handle.GetResult()
if err != nil {
return re.JSON(500, map[string]string{"error": err.Error()})
}
return re.JSON(200, map[string]string{"greeting": result})
})
return e.Next()
})
if err := app.Start(); err != nil {
log.Fatal(err)
}
}