Skip to content

Commit d343ae0

Browse files
committed
change: functions call
1 parent d9e5319 commit d343ae0

File tree

6 files changed

+71
-49
lines changed

6 files changed

+71
-49
lines changed

@doc/functions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
}
1313
```
1414

15-
## 2
15+
## 2Z
1616
```json
1717
{
1818
"msg()": "sayHi",

action/node.go

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -256,23 +256,35 @@ func (n *Node) reqUpdate() error {
256256
for key, updateVal := range n.structure.Update {
257257

258258
if strings.HasSuffix(key, consts.FunctionsKeySuffix) {
259-
functionName, paramKeys := util.ParseFunctionsStr(updateVal.(string))
260-
var param = model.Map{}
261-
for _, paramKey := range paramKeys {
262-
if paramKey == consts.FunctionOriReqParam {
263-
param[paramKey] = n.Data[i]
264-
} else {
265-
param[paramKey] = n.Data[i][paramKey]
266-
}
267-
}
259+
268260
k := key[0 : len(key)-2]
269-
val, err := n.action.actionConfig.CallFunc(n.ctx, functionName, param)
270-
if err != nil {
271-
return err
272-
}
273-
if val != nil {
274-
n.Data[i][k] = val
261+
262+
// call functions
263+
{
264+
queryConfig := n.action.actionConfig
265+
266+
functionName, paramKeys := util.ParseFunctionsStr(updateVal.(string))
267+
268+
_func := queryConfig.Func(functionName)
269+
270+
param := model.Map{}
271+
for paramI, item := range _func.ParamList {
272+
if item.Name == consts.FunctionOriReqParam {
273+
param[item.Name] = n.Data[i]
274+
} else {
275+
param[item.Name] = n.Data[i][paramKeys[paramI]]
276+
}
277+
}
278+
279+
val, err := _func.Handler(n.ctx, param)
280+
if err != nil {
281+
return err
282+
}
283+
if val != nil {
284+
n.Data[i][k] = val
285+
}
275286
}
287+
276288
} else {
277289
n.Data[i][key] = updateVal
278290
}

config/action_config.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ func (c *ActionConfig) GetAccessConfig(key string, noVerify bool) (*AccessConfig
2525
return c.access.GetAccess(key, noVerify)
2626
}
2727

28-
func (c *ActionConfig) CallFunc(ctx context.Context, name string, param model.Map) (any, error) {
29-
return c.functions.Call(ctx, name, param)
28+
func (c *ActionConfig) Func(name string) Func {
29+
return c.functions.funcMap[name]
3030
}
3131

3232
func (c *ActionConfig) GetRequest(tag string, method string, version string) (*Request, error) {

config/query_config.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package config
22

33
import (
4-
"context"
5-
"github.com/glennliao/apijson-go/model"
64
"github.com/samber/lo"
75
"net/http"
86
)
@@ -27,8 +25,8 @@ func (c *QueryConfig) GetAccessConfig(key string, noVerify bool) (*AccessConfig,
2725
return c.access.GetAccess(key, noVerify)
2826
}
2927

30-
func (c *QueryConfig) CallFunc(ctx context.Context, name string, param model.Map) (any, error) {
31-
return c.functions.Call(ctx, name, param)
28+
func (c *QueryConfig) Func(name string) Func {
29+
return c.functions.funcMap[name]
3230
}
3331

3432
func (c *QueryConfig) MaxTreeDeep() int {

query/node_func.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,32 @@ func newFuncNode(n *Node) *funcNode {
1414
}
1515

1616
func (h *funcNode) parse() {
17-
//n := h.node
18-
//functionName, _ := util.ParseFunctionsStr(n.simpleReqVal)
19-
//n.simpleReqVal = functionName
17+
2018
}
2119

2220
func (h *funcNode) fetch() {
2321
n := h.node
22+
queryConfig := n.queryContext.queryConfig
23+
2424
functionName, paramKeys := util.ParseFunctionsStr(n.simpleReqVal)
25-
//n.simpleReqVal = functionName
26-
// todo 如何传递参数
25+
26+
_func := queryConfig.Func(functionName)
2727

2828
param := model.Map{}
29-
for _, key := range paramKeys {
30-
param[key] = n.queryContext.pathNodes[key].simpleReqVal
29+
30+
for i, item := range _func.ParamList {
31+
valNode := n.queryContext.pathNodes[paramKeys[i]]
32+
if valNode.ret != nil {
33+
param[item.Name] = valNode.ret
34+
} else {
35+
param[item.Name] = valNode.simpleReqVal
36+
}
3137
}
32-
n.ret, n.err = n.queryContext.queryConfig.CallFunc(n.ctx, functionName, param)
38+
39+
n.ret, n.err = _func.Handler(n.ctx, param)
3340
}
3441

3542
func (h *funcNode) result() {
36-
//n := h.node
3743

3844
}
3945

query/node_query.go

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,8 @@ func (q *queryNode) fetch() {
217217
return
218218
}
219219

220+
queryConfig := n.queryContext.queryConfig
221+
220222
// 需优化调整
221223
for k, v := range n.req {
222224
if !strings.HasSuffix(k, consts.FunctionsKeySuffix) {
@@ -226,38 +228,43 @@ func (q *queryNode) fetch() {
226228
k = k[0 : len(k)-2]
227229

228230
functionName, paramKeys := util.ParseFunctionsStr(v.(string))
231+
_func := queryConfig.Func(functionName)
229232

230233
if n.isList {
231234
for i, item := range n.ret.([]model.Map) {
232-
var param = model.Map{}
233-
for _, key := range paramKeys {
234-
if key == consts.FunctionOriReqParam {
235-
param[key] = item
235+
236+
param := model.Map{}
237+
for paramI, paramItem := range _func.ParamList {
238+
if paramItem.Name == consts.FunctionOriReqParam {
239+
param[paramItem.Name] = item
236240
} else {
237-
param[key] = item[key]
241+
param[paramItem.Name] = item[paramKeys[paramI]]
238242
}
239243
}
240-
var err error
241-
n.ret.([]model.Map)[i][k], err = n.queryContext.queryConfig.CallFunc(n.ctx, functionName, param)
244+
245+
val, err := _func.Handler(n.ctx, param)
242246
if err != nil {
243-
panic(err)
247+
n.err = err
248+
return
244249
}
250+
n.ret.([]model.Map)[i][k] = val
245251
}
246252
} else {
247-
var param = model.Map{}
248-
for _, key := range paramKeys {
249-
if key == consts.FunctionOriReqParam {
250-
param[key] = n.ret.(model.Map)
253+
param := model.Map{}
254+
for paramI, paramItem := range _func.ParamList {
255+
if paramItem.Name == consts.FunctionOriReqParam {
256+
param[paramItem.Name] = n.ret.(model.Map)
251257
} else {
252-
param[key] = n.ret.(model.Map)[key]
258+
param[paramItem.Name] = n.ret.(model.Map)[paramKeys[paramI]]
253259
}
254-
255260
}
256-
var err error
257-
n.ret.(model.Map)[k], err = n.queryContext.queryConfig.CallFunc(n.ctx, functionName, param)
261+
262+
val, err := _func.Handler(n.ctx, param)
258263
if err != nil {
259-
panic(err)
264+
n.err = err
265+
return
260266
}
267+
n.ret.(model.Map)[k] = val
261268
}
262269
}
263270

@@ -274,7 +281,6 @@ func (q *queryNode) result() {
274281
n.ret = nil
275282
}
276283
}
277-
278284
}
279285

280286
func (q *queryNode) nodeType() int {

0 commit comments

Comments
 (0)