[feat] 重新梳理依赖

This commit is contained in:
2024-05-09 13:15:24 +08:00
parent 9172fb2f34
commit bddd754869
28 changed files with 341 additions and 1075 deletions
+53
View File
@@ -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
}