Skip to content

Commit 8476aff

Browse files
committed
## 0.2.0-beta8 导出Action字段
1 parent 40b950a commit 8476aff

File tree

8 files changed

+76
-64
lines changed

8 files changed

+76
-64
lines changed

action/action.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ type Action struct {
3939
// jsonFieldStyle 数据库返回的字段
4040
JsonFieldStyle config.FieldStyle
4141

42-
actionConfig *config.ActionConfig
42+
ActionConfig *config.ActionConfig
4343
}
4444

4545
func New(ctx context.Context, actionConfig *config.ActionConfig, method string, req model.Map) *Action {
@@ -49,7 +49,7 @@ func New(ctx context.Context, actionConfig *config.ActionConfig, method string,
4949
panic(err)
5050
}
5151

52-
delete(req, "tag")
52+
delete(req, consts.Tag)
5353
delete(req, "version")
5454

5555
a := &Action{
@@ -59,7 +59,7 @@ func New(ctx context.Context, actionConfig *config.ActionConfig, method string,
5959
req: req,
6060
children: map[string]*Node{},
6161
keyNode: map[string]*Node{},
62-
actionConfig: actionConfig,
62+
ActionConfig: actionConfig,
6363
}
6464
return a
6565
}
@@ -93,7 +93,7 @@ func (a *Action) parse() error {
9393

9494
node := newNode(key, list, structure, a.tagRequest.Executor[key])
9595
node.ctx = a.ctx
96-
node.action = a
96+
node.Action = a
9797
a.keyNode[key] = &node
9898
node.keyNode = a.keyNode
9999
err := node.parse(a.ctx, a.method)
@@ -160,7 +160,7 @@ func (a *Action) Result() (model.Map, error) {
160160
}
161161

162162
func checkTag(req model.Map, method string, requestCfg *config.ActionConfig) (*config.RequestConfig, error) {
163-
_tag, ok := req["tag"]
163+
_tag, ok := req[consts.Tag]
164164
if !ok {
165165
return nil, gerror.New("tag 缺失")
166166
}

action/node.go

+24-21
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,22 @@ package action
22

33
import (
44
"context"
5+
"net/http"
6+
"strings"
7+
58
"github.com/glennliao/apijson-go/config"
69
"github.com/glennliao/apijson-go/config/executor"
710
"github.com/glennliao/apijson-go/consts"
811
"github.com/glennliao/apijson-go/model"
912
"github.com/glennliao/apijson-go/util"
1013
"github.com/gogf/gf/v2/errors/gerror"
1114
"github.com/samber/lo"
12-
"net/http"
13-
"strings"
1415
)
1516

1617
type Node struct {
1718
req []model.Map
1819
ctx context.Context
19-
action *Action
20+
Action *Action
2021
Key string
2122
IsList bool
2223
tableName string
@@ -32,7 +33,7 @@ type Node struct {
3233

3334
keyNode map[string]*Node
3435

35-
//access *config.Access
36+
// access *config.Access
3637
}
3738

3839
func newNode(key string, req []model.Map, structure *config.Structure, executor string) Node {
@@ -65,8 +66,8 @@ func (n *Node) parseReq(method string) {
6566

6667
for i, item := range n.req {
6768

68-
//n.Data = append(n.Data, model.Map{})
69-
//n.Where = append(n.Where, model.Map{})
69+
// n.Data = append(n.Data, model.Map{})
70+
// n.Where = append(n.Where, model.Map{})
7071

7172
for key, val := range item {
7273

@@ -75,7 +76,7 @@ func (n *Node) parseReq(method string) {
7576
continue
7677
}
7778

78-
key = n.action.DbFieldStyle(n.ctx, n.tableName, key)
79+
key = n.Action.DbFieldStyle(n.ctx, n.tableName, key)
7980

8081
switch method {
8182
case http.MethodPost:
@@ -101,7 +102,7 @@ func (n *Node) parse(ctx context.Context, method string) error {
101102
if strings.HasSuffix(key, consts.ListKeySuffix) {
102103
key = key[0 : len(key)-2]
103104
}
104-
access, err := n.action.actionConfig.GetAccessConfig(key, true)
105+
access, err := n.Action.ActionConfig.GetAccessConfig(key, true)
105106

106107
if err != nil {
107108
return err
@@ -117,7 +118,7 @@ func (n *Node) parse(ctx context.Context, method string) error {
117118
return err
118119
}
119120
var accessRoles []string
120-
if n.action.NoAccessVerify == false {
121+
if n.Action.NoAccessVerify == false {
121122
// 1. 检查权限, 无权限就不用做参数检查了
122123

123124
switch method {
@@ -167,7 +168,7 @@ func (n *Node) roleUpdate() error {
167168

168169
func (n *Node) checkAccess(ctx context.Context, method string, accessRoles []string) error {
169170

170-
role, err := n.action.actionConfig.DefaultRoleFunc()(ctx, config.RoleReq{
171+
role, err := n.Action.ActionConfig.DefaultRoleFunc()(ctx, config.RoleReq{
171172
AccessName: n.tableName,
172173
Method: method,
173174
NodeRole: n.Role,
@@ -204,7 +205,7 @@ func (n *Node) whereUpdate(ctx context.Context, method string, accessRoles []str
204205
NodeReq: item,
205206
}
206207

207-
err := n.action.actionConfig.ConditionFunc(ctx, conditionReq, condition)
208+
err := n.Action.ActionConfig.ConditionFunc(ctx, conditionReq, condition)
208209

209210
if err != nil {
210211
return err
@@ -270,7 +271,7 @@ func (n *Node) reqUpdate() error {
270271

271272
// call functions
272273
{
273-
queryConfig := n.action.actionConfig
274+
queryConfig := n.Action.ActionConfig
274275

275276
functionName, paramKeys := util.ParseFunctionsStr(updateVal.(string))
276277

@@ -320,9 +321,9 @@ func (n *Node) reqUpdateBeforeDo() error {
320321
if strings.HasSuffix(k, consts.RefKeySuffix) {
321322
refNodeKey, refCol := util.ParseRefCol(v.(string))
322323
if strings.HasSuffix(refNodeKey, consts.ListKeySuffix) { // 双列表
323-
n.Data[i][k] = n.keyNode[refNodeKey].Data[i][n.action.DbFieldStyle(n.ctx, n.tableName, refCol)]
324+
n.Data[i][k] = n.keyNode[refNodeKey].Data[i][n.Action.DbFieldStyle(n.ctx, n.tableName, refCol)]
324325
} else {
325-
n.Data[i][k] = n.keyNode[refNodeKey].Data[0][n.action.DbFieldStyle(n.ctx, n.tableName, refCol)]
326+
n.Data[i][k] = n.keyNode[refNodeKey].Data[0][n.Action.DbFieldStyle(n.ctx, n.tableName, refCol)]
326327
}
327328
}
328329
}
@@ -341,18 +342,18 @@ func (n *Node) do(ctx context.Context, method string) (ret model.Map, err error)
341342
var rowKeyVal model.Map
342343
var rowKey string
343344

345+
access, err := n.Action.ActionConfig.GetAccessConfig(n.Key, true)
346+
if err != nil {
347+
return nil, err
348+
}
349+
344350
switch method {
345351
case http.MethodPost:
346352

347-
access, err := n.action.actionConfig.GetAccessConfig(n.Key, true)
348-
if err != nil {
349-
return nil, err
350-
}
351-
352353
if access.RowKeyGen != "" {
353354
for i, _ := range n.Data {
354355

355-
rowKeyVal, err = n.action.actionConfig.RowKeyGen(ctx, access.RowKeyGen, n.Key, n.Data[i])
356+
rowKeyVal, err = n.Action.ActionConfig.RowKeyGen(ctx, access.RowKeyGen, n.Key, n.Data[i])
356357
if err != nil {
357358
return nil, err
358359
}
@@ -382,6 +383,8 @@ func (n *Node) do(ctx context.Context, method string) (ret model.Map, err error)
382383
Table: n.tableName,
383384
Data: n.Data,
384385
Where: n.Where,
386+
Access: access,
387+
Config: n.Action.ActionConfig,
385388
})
386389

387390
if err != nil {
@@ -390,7 +393,7 @@ func (n *Node) do(ctx context.Context, method string) (ret model.Map, err error)
390393

391394
if len(n.Data) == 1 {
392395

393-
jsonStyle := n.action.JsonFieldStyle
396+
jsonStyle := n.Action.JsonFieldStyle
394397
if rowKeyVal != nil {
395398
for k, v := range rowKeyVal {
396399
if k == consts.RowKey {

config/executor/action.go

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package executor
22

33
import (
44
"context"
5+
6+
"github.com/glennliao/apijson-go/config"
57
"github.com/glennliao/apijson-go/model"
68
"github.com/samber/lo"
79
)
@@ -15,6 +17,8 @@ type ActionExecutorReq struct {
1517
Table string
1618
Data []model.Map
1719
Where []model.Map
20+
Access *config.AccessConfig
21+
Config *config.ActionConfig
1822
}
1923

2024
var actionExecutorMap = map[string]ActionExecutor{}

consts/node.go

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const (
1919
Total = "total"
2020
Query = "query"
2121
Alias = "@alias"
22+
Tag = "tag"
2223
)
2324

2425
const (

drivers/goframe/executor/action.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,12 @@ func (a *ActionExecutor) Delete(ctx context.Context, table string, where model.M
150150

151151
for k, v := range where {
152152

153-
if k == "@raw" {
153+
if k == consts.Raw {
154154
m = m.Where(v)
155155
continue
156156
}
157157

158-
if strings.HasSuffix(k, "{}") {
158+
if strings.HasSuffix(k, consts.OpIn) {
159159
m = m.WhereIn(k[0:len(k)-2], v)
160160
delete(where, k)
161161
continue

drivers/goframe/executor/query.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type SqlExecutor struct {
2121

2222
Role string
2323

24-
//保存where条件 [ ["user_id",">", 123], ["user_id","<=",345] ]
24+
// 保存where条件 [ ["user_id",">", 123], ["user_id","<=",345] ]
2525
Where [][]any
2626
accessCondition model.Map
2727

@@ -54,8 +54,8 @@ func (e *SqlExecutor) ParseCondition(conditions model.MapStrAny, accessVerify bo
5454

5555
for key, condition := range conditions {
5656
switch {
57-
case strings.HasSuffix(key, "{}"):
58-
e.parseMultiCondition(util.RemoveSuffix(key, "{}"), condition)
57+
case strings.HasSuffix(key, consts.OpIn):
58+
e.parseMultiCondition(util.RemoveSuffix(key, consts.OpIn), condition)
5959

6060
case strings.HasSuffix(key, consts.OpLike):
6161
e.Where = append(e.Where, []any{key[0 : len(key)-1], consts.SqlLike, gconv.String(condition)})

drivers/goframe/web/gf.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"time"
99

1010
"github.com/glennliao/apijson-go"
11+
"github.com/glennliao/apijson-go/consts"
1112
"github.com/glennliao/apijson-go/model"
1213
"github.com/gogf/gf/v2/container/gmap"
1314
"github.com/gogf/gf/v2/errors/gerror"
@@ -138,14 +139,14 @@ func sortMap(ctx context.Context, body []byte, res *gmap.ListMap, ret model.Map)
138139
}
139140

140141
for _, k := range reqSortMap.Keys() {
141-
if strings.HasPrefix(k, "@") {
142+
if strings.HasPrefix(k, consts.RefKeySuffix) {
142143
continue
143144
}
144-
if k == "tag" {
145+
if k == consts.Tag {
145146
continue
146147
}
147148

148-
if strings.HasSuffix(k, "@") {
149+
if strings.HasSuffix(k, consts.RefKeySuffix) {
149150
k = k[:len(k)-1]
150151
}
151152

query/node_query.go

+33-30
Original file line numberDiff line numberDiff line change
@@ -248,28 +248,47 @@ func (q *queryNode) fetch() {
248248
return
249249
}
250250

251-
queryConfig := n.queryContext.queryConfig
251+
if n.ret != nil { // parse 时判断是否有functions, 有则处理
252+
queryConfig := n.queryContext.queryConfig
253+
254+
// 需优化调整
255+
// 处理functions调用
256+
for k, v := range n.req {
257+
if !strings.HasSuffix(k, consts.FunctionsKeySuffix) {
258+
continue
259+
}
252260

253-
// 需优化调整
254-
for k, v := range n.req {
255-
if !strings.HasSuffix(k, consts.FunctionsKeySuffix) {
256-
continue
257-
}
261+
k = k[0 : len(k)-2]
258262

259-
k = k[0 : len(k)-2]
263+
functionName, paramKeys := util.ParseFunctionsStr(v.(string))
264+
_func := queryConfig.Func(functionName)
260265

261-
functionName, paramKeys := util.ParseFunctionsStr(v.(string))
262-
_func := queryConfig.Func(functionName)
266+
if n.isList {
267+
for i, item := range n.ret.([]model.Map) {
263268

264-
if n.isList && n.ret != nil {
265-
for i, item := range n.ret.([]model.Map) {
269+
param := model.Map{}
270+
for paramI, paramItem := range _func.ParamList {
271+
if paramItem.Name == consts.FunctionOriReqParam {
272+
param[paramItem.Name] = item
273+
} else {
274+
param[paramItem.Name] = item[paramKeys[paramI]]
275+
}
276+
}
266277

278+
val, err := _func.Handler(n.ctx, param)
279+
if err != nil {
280+
n.err = err
281+
return
282+
}
283+
n.ret.([]model.Map)[i][k] = val
284+
}
285+
} else {
267286
param := model.Map{}
268287
for paramI, paramItem := range _func.ParamList {
269288
if paramItem.Name == consts.FunctionOriReqParam {
270-
param[paramItem.Name] = item
289+
param[paramItem.Name] = n.ret.(model.Map)
271290
} else {
272-
param[paramItem.Name] = item[paramKeys[paramI]]
291+
param[paramItem.Name] = n.ret.(model.Map)[paramKeys[paramI]]
273292
}
274293
}
275294

@@ -278,24 +297,8 @@ func (q *queryNode) fetch() {
278297
n.err = err
279298
return
280299
}
281-
n.ret.([]model.Map)[i][k] = val
282-
}
283-
} else {
284-
param := model.Map{}
285-
for paramI, paramItem := range _func.ParamList {
286-
if paramItem.Name == consts.FunctionOriReqParam {
287-
param[paramItem.Name] = n.ret.(model.Map)
288-
} else {
289-
param[paramItem.Name] = n.ret.(model.Map)[paramKeys[paramI]]
290-
}
291-
}
292-
293-
val, err := _func.Handler(n.ctx, param)
294-
if err != nil {
295-
n.err = err
296-
return
300+
n.ret.(model.Map)[k] = val
297301
}
298-
n.ret.(model.Map)[k] = val
299302
}
300303
}
301304

0 commit comments

Comments
 (0)