增加搜索,TODO : 完成check rule
This commit is contained in:
parent
0d9fa31401
commit
04592e840f
99
middleware/apollo/search.go
Normal file
99
middleware/apollo/search.go
Normal file
@ -0,0 +1,99 @@
|
||||
// Package apollo...
|
||||
//
|
||||
// Description : apollo...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2021-11-24 10:26 下午
|
||||
package apollo
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
|
||||
"git.zhangdeman.cn/zhangdeman/gopkg/util"
|
||||
)
|
||||
|
||||
const (
|
||||
// OperateTypeIs 固定值
|
||||
OperateTypeIs = "is"
|
||||
// OperateTypeIn 在指定枚举值中
|
||||
OperateTypeIn = "in"
|
||||
// OperateTypeNotIn 不在指定枚举值中
|
||||
OperateTypeNotIn = "not_in"
|
||||
// OperateGt 大于
|
||||
OperateGt = "gt"
|
||||
// OperateGte 大于等于
|
||||
OperateGte = "gte"
|
||||
// OperateLt 小于
|
||||
OperateLt = "lt"
|
||||
// OperateLte 小于等于
|
||||
OperateLte = "lte"
|
||||
)
|
||||
|
||||
// Rule 数据过滤规则
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:32 下午 2021/11/24
|
||||
type Rule struct {
|
||||
Name string `json:"name"` // 规则名称
|
||||
ConditionList []Condition `json:"condition_list"` // 条件列表
|
||||
Data map[string]interface{} `json:"data"` // 满足条件时返回的数据
|
||||
}
|
||||
|
||||
// Condition 条件处理
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:27 下午 2021/11/24
|
||||
type Condition struct {
|
||||
InputKey string `json:"input_key"` // 从输入数据中读取的key
|
||||
Operate string `json:"operate"` // 操作
|
||||
TargetValue string `json:"target_value"` // 目标值
|
||||
}
|
||||
|
||||
// Search 搜索key并按照指定条件过滤
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 11:01 下午 2021/11/24
|
||||
func Search(key string, inputData map[string]interface{}, receiver interface{}) error {
|
||||
if nil == receiver {
|
||||
return errors.New("receiver is nil")
|
||||
}
|
||||
if nil == inputData {
|
||||
inputData = make(map[string]interface{})
|
||||
}
|
||||
var (
|
||||
readResult string
|
||||
err error
|
||||
formatResult []Rule
|
||||
)
|
||||
if readResult = Client.GetStringValue(key, ""); len(readResult) == 0 {
|
||||
return errors.New("key is not found : " + key)
|
||||
}
|
||||
if err = json.Unmarshal([]byte(readResult), &formatResult); nil != err {
|
||||
return errors.New("parse read config fail : " + err.Error())
|
||||
}
|
||||
for _, rule := range formatResult {
|
||||
if checkRule(rule, inputData) {
|
||||
byteData, mErr := json.Marshal(rule.Data)
|
||||
if nil != mErr {
|
||||
return mErr
|
||||
}
|
||||
// 命中规则, 返回数据
|
||||
return util.JSONUnmarshalWithNumber(byteData, receiver)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// checkRule 检测数据是否命中规则
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 10:59 下午 2021/11/24
|
||||
func checkRule(rule Rule, inputData map[string]interface{}) bool {
|
||||
return true
|
||||
}
|
Loading…
Reference in New Issue
Block a user