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/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
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
|
package share
|
||||||
|
|
||||||
// VERSION 版本号
|
// VERSION 版本号
|
||||||
const VERSION = "0.9.31"
|
const VERSION = "0.9.32"
|
||||||
|
|
||||||
// DOMAIN 许可域(废弃)
|
// DOMAIN 许可域(废弃)
|
||||||
const DOMAIN = "*.iqka.com"
|
const DOMAIN = "*.iqka.com"
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue