v0.9.32 table 默认查询条件支持直接读取 Session 变量

This commit is contained in:
Max 2022-01-19 09:54:55 +08:00
parent c7068102de
commit d68accee47
4 changed files with 64 additions and 29 deletions

View file

@ -6,9 +6,13 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/yaoapp/gou" "github.com/yaoapp/gou"
"github.com/yaoapp/gou/query/share"
"github.com/yaoapp/gou/session"
"github.com/yaoapp/kun/any" "github.com/yaoapp/kun/any"
"github.com/yaoapp/kun/exception" "github.com/yaoapp/kun/exception"
"github.com/yaoapp/kun/maps"
"github.com/yaoapp/kun/utils" "github.com/yaoapp/kun/utils"
"github.com/yaoapp/xiang/xlog"
) )
// IsAllow 鉴权处理程序 // IsAllow 鉴权处理程序
@ -44,25 +48,6 @@ func (api API) ProcessIs(name string) bool {
return strings.ToLower(api.Process) == strings.ToLower(name) 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 // DefaultInt 读取参数 Int
func (api API) DefaultInt(i int, defaults ...int) int { func (api API) DefaultInt(i int, defaults ...int) int {
value := 0 value := 0
@ -103,12 +88,11 @@ func (api API) DefaultString(i int, defaults ...string) string {
} }
// MergeDefaultQueryParam 合并默认查询参数 // 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 { if len(api.Default) > i && api.Default[i] != nil {
defaults, ok := gou.AnyToQueryParam(api.Default[i])
if !ok { defaults := GetQueryParam(api.Default[i], sid)
exception.New("参数默认值数据结构错误", 400).Ctx(api.Default[i]).Throw()
}
if defaults.Withs != nil { if defaults.Withs != nil {
param.Withs = defaults.Withs param.Withs = defaults.Withs
} }
@ -131,3 +115,22 @@ func (api API) MergeDefaultQueryParam(param gou.QueryParam, i int) gou.QueryPara
} }
return param 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
View 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)
}

View file

@ -1,7 +1,7 @@
package share package share
// VERSION 版本号 // VERSION 版本号
const VERSION = "0.9.31" const VERSION = "0.9.32"
// DOMAIN 许可域(废弃) // DOMAIN 许可域(废弃)
const DOMAIN = "*.iqka.com" const DOMAIN = "*.iqka.com"

View file

@ -43,7 +43,7 @@ func ProcessSearch(process *gou.Process) interface{} {
// 参数表 // 参数表
process.ValidateArgNums(4) 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)) page := process.ArgsInt(2, api.DefaultInt(1))
pagesize := process.ArgsInt(3, api.DefaultInt(2)) pagesize := process.ArgsInt(3, api.DefaultInt(2))
@ -72,7 +72,7 @@ func ProcessFind(process *gou.Process) interface{} {
// 参数表 // 参数表
process.ValidateArgNums(2) process.ValidateArgNums(2)
id := process.Args[1] 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() 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 { // 限定删除行 if param.Limit == 0 { // 限定删除行
param.Limit = 10 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 { // 限定删除行 if param.Limit == 0 { // 限定删除行
param.Limit = 10 param.Limit = 10
} }