v0.9.32 table 默认查询条件支持直接读取 Session 变量
This commit is contained in:
parent
c7068102de
commit
d68accee47
4 changed files with 64 additions and 29 deletions
51
share/api.go
51
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
|
||||
}
|
||||
|
|
|
|||
32
share/api_test.go
Normal file
32
share/api_test.go
Normal file
|
|
@ -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)
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package share
|
||||
|
||||
// VERSION 版本号
|
||||
const VERSION = "0.9.31"
|
||||
const VERSION = "0.9.32"
|
||||
|
||||
// DOMAIN 许可域(废弃)
|
||||
const DOMAIN = "*.iqka.com"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue