优化载入逻辑: Step 2/5
This commit is contained in:
parent
e08df986d3
commit
1d5f1d110f
4 changed files with 81 additions and 11 deletions
|
|
@ -12,6 +12,7 @@ import (
|
||||||
"github.com/yaoapp/xiang/api"
|
"github.com/yaoapp/xiang/api"
|
||||||
"github.com/yaoapp/xiang/app"
|
"github.com/yaoapp/xiang/app"
|
||||||
"github.com/yaoapp/xiang/config"
|
"github.com/yaoapp/xiang/config"
|
||||||
|
"github.com/yaoapp/xiang/flow"
|
||||||
"github.com/yaoapp/xiang/share"
|
"github.com/yaoapp/xiang/share"
|
||||||
"github.com/yaoapp/xiang/table"
|
"github.com/yaoapp/xiang/table"
|
||||||
"github.com/yaoapp/xun/capsule"
|
"github.com/yaoapp/xun/capsule"
|
||||||
|
|
@ -23,6 +24,7 @@ func Load(cfg config.Config) {
|
||||||
DBConnect(cfg.Database)
|
DBConnect(cfg.Database)
|
||||||
LoadEngine(cfg.Path)
|
LoadEngine(cfg.Path)
|
||||||
api.Load(cfg) // 加载API
|
api.Load(cfg) // 加载API
|
||||||
|
flow.Load(cfg) // 加载Flow
|
||||||
LoadApp(share.AppRoot{
|
LoadApp(share.AppRoot{
|
||||||
APIs: cfg.RootAPI,
|
APIs: cfg.RootAPI,
|
||||||
Flows: cfg.RootFLow,
|
Flows: cfg.RootFLow,
|
||||||
|
|
@ -144,14 +146,14 @@ func LoadApp(app share.AppRoot) {
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// 加载Flow
|
// // 加载Flow
|
||||||
if strings.HasPrefix(app.Flows, "fs://") || !strings.Contains(app.Flows, "://") {
|
// if strings.HasPrefix(app.Flows, "fs://") || !strings.Contains(app.Flows, "://") {
|
||||||
root := strings.TrimPrefix(app.Flows, "fs://")
|
// root := strings.TrimPrefix(app.Flows, "fs://")
|
||||||
scripts := share.GetAppFilesFS(root, ".json")
|
// scripts := share.GetAppFilesFS(root, ".json")
|
||||||
for _, script := range scripts {
|
// for _, script := range scripts {
|
||||||
gou.LoadFlow(string(script.Content), script.Name)
|
// gou.LoadFlow(string(script.Content), script.Name)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
// 加载Model
|
// 加载Model
|
||||||
if strings.HasPrefix(app.Models, "fs://") || !strings.Contains(app.Models, "://") {
|
if strings.HasPrefix(app.Models, "fs://") || !strings.Contains(app.Models, "://") {
|
||||||
|
|
|
||||||
29
flow/flow.go
29
flow/flow.go
|
|
@ -1,4 +1,29 @@
|
||||||
package flow
|
package flow
|
||||||
|
|
||||||
// Load 加载业务逻辑编排
|
import (
|
||||||
func Load(filepath string) {}
|
"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)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
||||||
24
flow/flow_test.go
Normal file
24
flow/flow_test.go
Normal file
|
|
@ -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))
|
||||||
|
}
|
||||||
19
tests/flows/foo/bar.flow.json
Normal file
19
tests/flows/foo/bar.flow.json
Normal file
|
|
@ -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}}"
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue