func()

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
	}
}