[feat] 重新梳理依赖
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package base
|
||||
|
||||
import "git.fsdpf.net/go/condition"
|
||||
|
||||
type ResCondition struct {
|
||||
Id int `db:"id"`
|
||||
Pid int `db:"pid"`
|
||||
@@ -36,3 +38,54 @@ type ResWhereExpr struct {
|
||||
}
|
||||
|
||||
type GetResConditions func(categoryUuid string) []ResCondition
|
||||
|
||||
// Create Condition By Resource
|
||||
func NewConditionByRes(items []ResCondition, opts ...condition.Option) (root *condition.Condition) {
|
||||
conditions := map[int]any{}
|
||||
|
||||
for _, item := range items {
|
||||
switch item.Type {
|
||||
case "and":
|
||||
conditions[item.Id] = condition.New()
|
||||
case "or":
|
||||
conditions[item.Id] = condition.New(condition.Type(condition.OR))
|
||||
case "expr":
|
||||
conditions[item.Id] = condition.NewExpr(
|
||||
item.ColumnResource, item.Column,
|
||||
condition.Token(item.Value, condition.TokenType(item.ValueType)),
|
||||
condition.Operator(condition.ConditionOperator(item.Operator)),
|
||||
condition.FieldSqlFn(item.ColumnSqlFunc, item.ColumnSqlFuncParam),
|
||||
condition.IgnoreEmptyParma(item.IgnoreEmptyParma),
|
||||
)
|
||||
}
|
||||
|
||||
if item.Pid == 0 && (item.Type == "and" || item.Type == "or") {
|
||||
root = conditions[item.Id].(*condition.Condition)
|
||||
}
|
||||
}
|
||||
|
||||
for _, item := range items {
|
||||
parent := root
|
||||
|
||||
if item.Pid == 0 {
|
||||
continue
|
||||
} else {
|
||||
parent = conditions[item.Pid].(*condition.Condition)
|
||||
}
|
||||
|
||||
switch item.Type {
|
||||
case "and", "or":
|
||||
parent.SetCondition(conditions[item.Id].(*condition.Condition))
|
||||
case "expr":
|
||||
parent.SetExpr(conditions[item.Id].(*condition.ConditionExpr))
|
||||
}
|
||||
}
|
||||
|
||||
if root == nil {
|
||||
root = condition.New()
|
||||
}
|
||||
|
||||
root.SetOption(opts...)
|
||||
|
||||
return root
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user