in module/filter_op.go [1672:1749]
func (p *BoolFilterOp) DomainEvaluate(properties map[string]interface{}, userProperties map[string]interface{}, itemProperties map[string]interface{}) (bool, error) {
if p.filterParam == nil {
return false, nil
}
for _, op := range p.filterParam.operators {
if domainFilterOp, ok := op.(FilterByDomainOp); ok {
if domainFilterOp.OpDomain() == ITEM {
ret, err := domainFilterOp.DomainEvaluate(itemProperties, userProperties, itemProperties)
if err != nil {
return false, err
}
if p.isOrCondition {
if ret {
return true, nil
}
} else {
if !ret {
return false, nil
}
}
} else if domainFilterOp.OpDomain() == USER {
ret, err := domainFilterOp.DomainEvaluate(userProperties, userProperties, itemProperties)
if err != nil {
return false, err
}
if p.isOrCondition {
if ret {
return true, nil
}
} else {
if !ret {
return false, nil
}
}
}
} else {
if op.OpDomain() == ITEM {
ret, err := op.Evaluate(itemProperties)
if err != nil {
return false, err
}
if p.isOrCondition {
if ret {
return true, nil
}
} else {
if !ret {
return false, nil
}
}
} else if op.OpDomain() == USER {
ret, err := op.Evaluate(userProperties)
if err != nil {
return false, err
}
if p.isOrCondition {
if ret {
return true, nil
}
} else {
if !ret {
return false, nil
}
}
} else {
return false, fmt.Errorf("not support this domain:%s", op.OpDomain())
}
}
}
if p.isOrCondition {
return false, nil
} else {
return true, nil
}
}