107 lines
2.9 KiB
Go
107 lines
2.9 KiB
Go
package workflow
|
|
|
|
import (
|
|
"path/filepath"
|
|
|
|
jsoniter "github.com/json-iterator/go"
|
|
"github.com/yaoapp/gou"
|
|
)
|
|
|
|
// API:
|
|
// 读取工作流 GET /api/xiang/workflow/<工作流名称>/find/:id
|
|
// 读取工作流 GET /api/xiang/workflow/<工作流名称>/open/:data_id
|
|
// 读取工作流配置 GET /api/xiang/workflow/<工作流名称>/setting/:data_id
|
|
// 调用自定义API POST /api/xiang/workflow/<工作流名称>/<自定义API路由>
|
|
|
|
// SetupAPIs 注册API
|
|
func (workflow *WorkFlow) SetupAPIs() error {
|
|
api := &gou.HTTP{
|
|
Name: "工作流接口",
|
|
Version: "1.0.0",
|
|
Description: "工作流接口 API",
|
|
Group: "xiang/workflow",
|
|
Guard: "bearer-jwt",
|
|
Paths: []gou.Path{},
|
|
}
|
|
|
|
workflow.AddAPI(api, workflow.apiFind())
|
|
workflow.AddAPI(api, workflow.apiOpen())
|
|
workflow.AddAPI(api, workflow.apiSetting())
|
|
|
|
for name, custAPI := range workflow.APIs {
|
|
workflow.AddAPI(api, gou.Path{
|
|
Label: custAPI.Label,
|
|
Description: custAPI.Description,
|
|
Path: filepath.Join("/", workflow.Name, name),
|
|
Method: "POST",
|
|
Process: custAPI.Process,
|
|
In: []string{workflow.Name, "$session.user_id", "$query.data_id", ":payload"},
|
|
Out: gou.Out{
|
|
Status: 200,
|
|
Type: "application/json",
|
|
},
|
|
})
|
|
}
|
|
|
|
// 注册API
|
|
source, err := jsoniter.Marshal(api)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
gou.LoadAPI(string(source), "xiang.workflow."+workflow.Name)
|
|
return nil
|
|
}
|
|
|
|
// AddAPI 添加API
|
|
func (workflow *WorkFlow) AddAPI(api *gou.HTTP, path gou.Path) {
|
|
api.Paths = append(api.Paths, path)
|
|
}
|
|
|
|
// apiFind 使用ID读取工作流
|
|
func (workflow *WorkFlow) apiFind() gou.Path {
|
|
return gou.Path{
|
|
Label: "读取工作流",
|
|
Description: "使用工作流ID读取工作流",
|
|
Path: filepath.Join("/", workflow.Name, "find", ":id"),
|
|
Method: "GET",
|
|
Process: "xiang.workflow.Find",
|
|
In: []string{workflow.Name, "$param.id"},
|
|
Out: gou.Out{
|
|
Status: 200,
|
|
Type: "application/json",
|
|
},
|
|
}
|
|
}
|
|
|
|
// apiOpen 使用用户ID和数据ID 读取工作流
|
|
func (workflow *WorkFlow) apiOpen() gou.Path {
|
|
return gou.Path{
|
|
Label: "读取工作流",
|
|
Description: "使用数据ID读取工作流",
|
|
Path: filepath.Join("/", workflow.Name, "open", ":data_id"),
|
|
Method: "GET",
|
|
Process: "xiang.workflow.Open",
|
|
In: []string{workflow.Name, "$session.user_id", "$param.data_id"},
|
|
Out: gou.Out{
|
|
Status: 200,
|
|
Type: "application/json",
|
|
},
|
|
}
|
|
}
|
|
|
|
// apiSetting 读取工作流配置
|
|
func (workflow *WorkFlow) apiSetting() gou.Path {
|
|
return gou.Path{
|
|
Label: "读取工作流配置",
|
|
Description: "使用数据ID读取工作流配置",
|
|
Path: filepath.Join("/", workflow.Name, "setting", ":data_id"),
|
|
Method: "GET",
|
|
Process: "xiang.workflow.Setting",
|
|
In: []string{workflow.Name, "$session.user_id", "$param.data_id"},
|
|
Out: gou.Out{
|
|
Status: 200,
|
|
Type: "application/json",
|
|
},
|
|
}
|
|
}
|