diff --git a/global/process_test.go b/global/process_test.go index 7bf82427..8e26ed07 100644 --- a/global/process_test.go +++ b/global/process_test.go @@ -56,3 +56,20 @@ func TestProcessFind(t *testing.T) { res := any.Of(response).Map() assert.Equal(t, any.Of(res.Get("id")).CInt(), 1) } + +func TestProcessSave(t *testing.T) { + args := []interface{}{ + "service", + map[string]interface{}{ + "name": "腾讯黑岩云主机", + "short_name": "高性能云主机", + "kind_id": 3, + "manu_id": 1, + "price_options": []string{"按月订阅"}, + }, + } + process := gou.NewProcess("xiang.table.Save", args...) + response := table.ProcessSave(process) + assert.NotNil(t, response) + assert.True(t, any.Of(response).IsInt()) +} diff --git a/table/process.go b/table/process.go index a08dcf0e..583a03e8 100644 --- a/table/process.go +++ b/table/process.go @@ -8,6 +8,7 @@ func init() { // 注册处理器 gou.RegisterProcessHandler("xiang.table.Search", ProcessSearch) gou.RegisterProcessHandler("xiang.table.Find", ProcessFind) + gou.RegisterProcessHandler("xiang.table.Save", ProcessSave) } // ProcessSearch xiang.table.Search @@ -46,3 +47,16 @@ func ProcessFind(process *gou.Process) interface{} { param := api.MergeDefaultQueryParam(gou.QueryParam{}, 1) return gou.NewProcess(api.Process, id, param).Run() } + +// ProcessSave xiang.table.Save +// 保存单条记录。如数据记录中包含主键字段则更新,不包含主键字段则创建记录;返回创建或更新的记录主键值 +func ProcessSave(process *gou.Process) interface{} { + process.ValidateArgNums(2) + name := process.ArgsString(0) + table := Select(name) + api := table.APIs["save"].ValidateLoop("xiang.table.save") + if process.NumOfArgsIs(3) && api.IsAllow(process.Args[2]) { + return nil + } + return gou.NewProcess(api.Process, process.Args[1]).Run() +}