+ Table Select API

This commit is contained in:
Max 2022-01-01 20:14:46 +08:00
parent 4f82bfff3e
commit 0e44d5689f
6 changed files with 66 additions and 5 deletions

View file

@ -44,7 +44,7 @@ func apiFindDefault(model *gou.Model, withs map[string]gou.With) share.API {
} }
} }
// apiFindDefault 接口默认值 // apiDefault 接口默认值
func apiDefault(model *gou.Model, name string, process string) share.API { func apiDefault(model *gou.Model, name string, process string) share.API {
return share.API{ return share.API{
Name: name, Name: name,

View file

@ -12,6 +12,7 @@ func init() {
// 注册处理器 // 注册处理器
gou.RegisterProcessHandler("xiang.table.Search", ProcessSearch) gou.RegisterProcessHandler("xiang.table.Search", ProcessSearch)
gou.RegisterProcessHandler("xiang.table.Find", ProcessFind) gou.RegisterProcessHandler("xiang.table.Find", ProcessFind)
gou.RegisterProcessHandler("xiang.table.Select", ProcessSelect)
gou.RegisterProcessHandler("xiang.table.Save", ProcessSave) gou.RegisterProcessHandler("xiang.table.Save", ProcessSave)
gou.RegisterProcessHandler("xiang.table.Delete", ProcessDelete) gou.RegisterProcessHandler("xiang.table.Delete", ProcessDelete)
gou.RegisterProcessHandler("xiang.table.Insert", ProcessInsert) gou.RegisterProcessHandler("xiang.table.Insert", ProcessInsert)
@ -268,3 +269,16 @@ func ProcessQuickSave(process *gou.Process) interface{} {
return gou.NewProcess(api.Process, args...).Run() return gou.NewProcess(api.Process, args...).Run()
} }
// ProcessSelect xiang.table.Select
// 单表数据查询,一般用于下拉菜单检索
func ProcessSelect(process *gou.Process) interface{} {
process.ValidateArgNums(1)
name := process.ArgsString(0)
table := Select(name)
api := table.APIs["select"].ValidateLoop("xiang.table.select")
if process.NumOfArgsIs(5) && api.IsAllow(process.Args[4]) {
return nil
}
return gou.NewProcess(api.Process, process.Args[1:]...).Run()
}

View file

@ -7,6 +7,7 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/yaoapp/gou" "github.com/yaoapp/gou"
"github.com/yaoapp/kun/any" "github.com/yaoapp/kun/any"
"github.com/yaoapp/kun/maps"
"github.com/yaoapp/xiang/config" "github.com/yaoapp/xiang/config"
"github.com/yaoapp/xiang/model" "github.com/yaoapp/xiang/model"
"github.com/yaoapp/xiang/share" "github.com/yaoapp/xiang/share"
@ -358,3 +359,33 @@ func TestTableProcessQuickSave(t *testing.T) {
// 清空数据 // 清空数据
capsule.Query().Table("service").WhereIn("id", []int{id, newID[0]}).Delete() capsule.Query().Table("service").WhereIn("id", []int{id, newID[0]}).Delete()
} }
func TestTableProcessSelect(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 := ProcessSave(process)
assert.NotNil(t, response)
assert.True(t, any.Of(response).IsInt())
id := any.Of(response).CInt()
args = []interface{}{"service", "腾讯", "name", "id"}
data := gou.NewProcess("xiang.table.select", args...).Run().([]maps.MapStrAny)
assert.Greater(t, len(data), 1)
for _, row := range data {
assert.Contains(t, row.Get("name"), "腾讯")
}
// 清空数据
capsule.Query().Table("service").WhereIn("id", []int{id}).Delete()
}

View file

@ -140,7 +140,8 @@ func getDefaultAPIs(bind Bind) map[string]share.API {
"delete-where": apiDefaultWhere(model, bind.Withs, "delete-where", "DeleteWhere"), "delete-where": apiDefaultWhere(model, bind.Withs, "delete-where", "DeleteWhere"),
"update-in": apiDefault(model, "update-in", "UpdateWhere"), "update-in": apiDefault(model, "update-in", "UpdateWhere"),
"update-where": apiDefaultWhere(model, bind.Withs, "update-where", "UpdateWhere"), "update-where": apiDefaultWhere(model, bind.Withs, "update-where", "UpdateWhere"),
"quicksave": apiDefault(model, "quicksave", "EachSaveAfterDelete"), "quicksave": apiDefault(model, "quicksave", "EachSaveAfterDelete"), // 批量保存
"select": apiDefault(model, "select", "SelectOption"), // 选择
} }
return apis return apis

View file

@ -18,9 +18,8 @@
} }
}, },
"apis": { "apis": {
"save": { "save": { "guard": "-" },
"guard": "-" "select": { "guard": "-" },
},
"search": { "search": {
"process": "models.service.Paginate", "process": "models.service.Paginate",
"guard": "-", "guard": "-",

View file

@ -25,6 +25,22 @@
"type": "application/json" "type": "application/json"
} }
}, },
{
"path": "/:name/select",
"method": "GET",
"process": "xiang.table.Select",
"in": [
"$param.name",
"$query.keyword",
"$query.name",
"$query.value",
"$query.limit"
],
"out": {
"status": 200,
"type": "application/json"
}
},
{ {
"path": "/:name/save", "path": "/:name/save",
"method": "POST", "method": "POST",