diff --git a/share/api.go b/share/api.go index edc03b06..b578d2b8 100644 --- a/share/api.go +++ b/share/api.go @@ -6,9 +6,13 @@ import ( "github.com/gin-gonic/gin" "github.com/yaoapp/gou" + "github.com/yaoapp/gou/query/share" + "github.com/yaoapp/gou/session" "github.com/yaoapp/kun/any" "github.com/yaoapp/kun/exception" + "github.com/yaoapp/kun/maps" "github.com/yaoapp/kun/utils" + "github.com/yaoapp/xiang/xlog" ) // IsAllow 鉴权处理程序 @@ -44,25 +48,6 @@ func (api API) ProcessIs(name string) bool { return strings.ToLower(api.Process) == strings.ToLower(name) } -// DefaultQueryParams 读取参数 QueryParam -func (api API) DefaultQueryParams(i int, defaults ...gou.QueryParam) gou.QueryParam { - param := gou.QueryParam{} - if len(defaults) > 0 { - param = defaults[0] - } - - if api.Default[i] == nil || len(api.Default) <= i { - return param - } - - param, ok := api.Default[i].(gou.QueryParam) - if !ok { - param, ok = gou.AnyToQueryParam(api.Default[i]) - } - - return param -} - // DefaultInt 读取参数 Int func (api API) DefaultInt(i int, defaults ...int) int { value := 0 @@ -103,12 +88,11 @@ func (api API) DefaultString(i int, defaults ...string) string { } // MergeDefaultQueryParam 合并默认查询参数 -func (api API) MergeDefaultQueryParam(param gou.QueryParam, i int) gou.QueryParam { +func (api API) MergeDefaultQueryParam(param gou.QueryParam, i int, sid string) gou.QueryParam { if len(api.Default) > i && api.Default[i] != nil { - defaults, ok := gou.AnyToQueryParam(api.Default[i]) - if !ok { - exception.New("参数默认值数据结构错误", 400).Ctx(api.Default[i]).Throw() - } + + defaults := GetQueryParam(api.Default[i], sid) + if defaults.Withs != nil { param.Withs = defaults.Withs } @@ -131,3 +115,22 @@ func (api API) MergeDefaultQueryParam(param gou.QueryParam, i int) gou.QueryPara } return param } + +// GetQueryParam 解析参数 +func GetQueryParam(v interface{}, sid string) gou.QueryParam { + data := map[string]interface{}{} + if sid != "" { + var err error + ss := session.Global().ID(sid) + data, err = ss.Dump() + if err != nil { + xlog.Printf("读取会话信息出错 %s", err.Error()) + } + } + v = share.Bind(v, maps.Of(data).Dot()) + param, ok := gou.AnyToQueryParam(v) + if !ok { + exception.New("参数默认值数据结构错误", 400).Ctx(v).Throw() + } + return param +} diff --git a/share/api_test.go b/share/api_test.go new file mode 100644 index 00000000..32f4083b --- /dev/null +++ b/share/api_test.go @@ -0,0 +1,32 @@ +package share + +import ( + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/yaoapp/gou/session" +) + +func TestGetQueryParam(t *testing.T) { + SessionServerStart() + defer SessionServerStop() + sid := session.ID() + s := session.Global().ID(sid).Expire(5000 * time.Microsecond) + s.MustSet("id", 10086) + s.MustSet("extra", map[string]interface{}{"gender": "男"}) + query := map[string]interface{}{ + "select": []string{"id", "name"}, + "wheres": []map[string]interface{}{ + {"column": "id", "op": "=", "value": "{{id}}"}, + {"column": "gender", "op": "=", "value": "{{extra.gender}}"}, + }, + } + param := GetQueryParam(query, sid) + assert.Equal(t, "id", param.Wheres[0].Column) + assert.Equal(t, "=", param.Wheres[0].OP) + assert.Equal(t, float64(10086), param.Wheres[0].Value) + assert.Equal(t, "gender", param.Wheres[1].Column) + assert.Equal(t, "=", param.Wheres[1].OP) + assert.Equal(t, "男", param.Wheres[1].Value) +} diff --git a/share/const.go b/share/const.go index 9ee0d033..603cc27e 100644 --- a/share/const.go +++ b/share/const.go @@ -1,7 +1,7 @@ package share // VERSION 版本号 -const VERSION = "0.9.31" +const VERSION = "0.9.32" // DOMAIN 许可域(废弃) const DOMAIN = "*.iqka.com" diff --git a/table/process.go b/table/process.go index 2533f6c6..98cb2e0c 100644 --- a/table/process.go +++ b/table/process.go @@ -43,7 +43,7 @@ func ProcessSearch(process *gou.Process) interface{} { // 参数表 process.ValidateArgNums(4) - param := api.MergeDefaultQueryParam(process.ArgsQueryParams(1), 0) + param := api.MergeDefaultQueryParam(process.ArgsQueryParams(1), 0, process.Sid) page := process.ArgsInt(2, api.DefaultInt(1)) pagesize := process.ArgsInt(3, api.DefaultInt(2)) @@ -72,7 +72,7 @@ func ProcessFind(process *gou.Process) interface{} { // 参数表 process.ValidateArgNums(2) id := process.Args[1] - param := api.MergeDefaultQueryParam(gou.QueryParam{}, 1) + param := api.MergeDefaultQueryParam(gou.QueryParam{}, 1, process.Sid) // 查询数据 response := gou.NewProcess(api.Process, id, param).Run() @@ -135,7 +135,7 @@ func ProcessDeleteWhere(process *gou.Process) interface{} { } // 批量删除 - param := api.MergeDefaultQueryParam(process.ArgsQueryParams(1), 0) + param := api.MergeDefaultQueryParam(process.ArgsQueryParams(1), 0, process.Sid) if param.Limit == 0 { // 限定删除行 param.Limit = 10 } @@ -180,7 +180,7 @@ func ProcessUpdateWhere(process *gou.Process) interface{} { } // 批量更新 - param := api.MergeDefaultQueryParam(process.ArgsQueryParams(1), 0) + param := api.MergeDefaultQueryParam(process.ArgsQueryParams(1), 0, process.Sid) if param.Limit == 0 { // 限定删除行 param.Limit = 10 }