diff --git a/engine/load.go b/engine/load.go index 0ba079d9..71dcd4ed 100644 --- a/engine/load.go +++ b/engine/load.go @@ -12,6 +12,7 @@ import ( "github.com/yaoapp/xiang/api" "github.com/yaoapp/xiang/app" "github.com/yaoapp/xiang/config" + "github.com/yaoapp/xiang/flow" "github.com/yaoapp/xiang/share" "github.com/yaoapp/xiang/table" "github.com/yaoapp/xun/capsule" @@ -22,7 +23,8 @@ func Load(cfg config.Config) { app.Load(cfg) // 加载应用信息 DBConnect(cfg.Database) LoadEngine(cfg.Path) - api.Load(cfg) // 加载API + api.Load(cfg) // 加载API + flow.Load(cfg) // 加载Flow LoadApp(share.AppRoot{ APIs: cfg.RootAPI, Flows: cfg.RootFLow, @@ -144,14 +146,14 @@ func LoadApp(app share.AppRoot) { // } // } - // 加载Flow - if strings.HasPrefix(app.Flows, "fs://") || !strings.Contains(app.Flows, "://") { - root := strings.TrimPrefix(app.Flows, "fs://") - scripts := share.GetAppFilesFS(root, ".json") - for _, script := range scripts { - gou.LoadFlow(string(script.Content), script.Name) - } - } + // // 加载Flow + // if strings.HasPrefix(app.Flows, "fs://") || !strings.Contains(app.Flows, "://") { + // root := strings.TrimPrefix(app.Flows, "fs://") + // scripts := share.GetAppFilesFS(root, ".json") + // for _, script := range scripts { + // gou.LoadFlow(string(script.Content), script.Name) + // } + // } // 加载Model if strings.HasPrefix(app.Models, "fs://") || !strings.Contains(app.Models, "://") { diff --git a/flow/flow.go b/flow/flow.go index 0dd4d809..22c743b7 100644 --- a/flow/flow.go +++ b/flow/flow.go @@ -1,4 +1,29 @@ package flow -// Load 加载业务逻辑编排 -func Load(filepath string) {} +import ( + "fmt" + + "github.com/yaoapp/gou" + "github.com/yaoapp/xiang/config" + "github.com/yaoapp/xiang/share" +) + +// Load 加载API +func Load(cfg config.Config) { + fmt.Println(cfg.RootFLow) + LoadFrom(cfg.RootFLow, "") +} + +// LoadFrom 从特定目录加载 +func LoadFrom(dir string, prefix string) { + + if share.DirNotExists(dir) { + return + } + + share.Walk(dir, ".json", func(root, filename string) { + name := share.SpecName(root, filename) + content := share.ReadFile(filename) + gou.LoadFlow(string(content), prefix+name) + }) +} diff --git a/flow/flow_test.go b/flow/flow_test.go new file mode 100644 index 00000000..c819c0e8 --- /dev/null +++ b/flow/flow_test.go @@ -0,0 +1,24 @@ +package flow + +import ( + "testing" + + "github.com/go-playground/assert/v2" + "github.com/yaoapp/gou" + "github.com/yaoapp/xiang/config" +) + +func TestLoad(t *testing.T) { + gou.Flows = make(map[string]*gou.Flow) + Load(config.Conf) + LoadFrom("not a path", "404.") + check(t) +} + +func check(t *testing.T) { + keys := []string{} + for key := range gou.Flows { + keys = append(keys, key) + } + assert.Equal(t, 2, len(keys)) +} diff --git a/tests/flows/foo/bar.flow.json b/tests/flows/foo/bar.flow.json new file mode 100644 index 00000000..4c69978f --- /dev/null +++ b/tests/flows/foo/bar.flow.json @@ -0,0 +1,19 @@ +{ + "label": "最新信息", + "version": "1.0.0", + "description": "最新信息", + "nodes": [ + { + "name": "user", + "engine": "xiang", + "query": { + "select": ["id", "name"], + "from": "$user", + "first": true + } + } + ], + "output": { + "params": "{{$in}}" + } +}