package managesdk type QueryOperator string const ( OperatorEqual QueryOperator = "=" OperatorNotEqual QueryOperator = "!=" OperatorGreaterThan QueryOperator = ">" OperatorGreaterEqual QueryOperator = ">=" OperatorLessThan QueryOperator = "<" OperatorLessEqual QueryOperator = "<=" OperatorLike QueryOperator = "like" OperatorNotLike QueryOperator = "not_like" OperatorStartsWith QueryOperator = "starts_with" OperatorEndsWith QueryOperator = "ends_with" OperatorIsNull QueryOperator = "is_null" OperatorIsNotNull QueryOperator = "is_not_null" OperatorIn QueryOperator = "in" OperatorNotIn QueryOperator = "not_in" ) type LogicOperator string const ( LogicAnd LogicOperator = "AND" LogicOr LogicOperator = "OR" ) type QueryCondition struct { Field string `json:"field"` Operator QueryOperator `json:"operator"` Value any `json:"value,omitempty"` } type ConditionGroup struct { Conditions []ConditionItem `json:"conditions"` Logic LogicOperator `json:"logic"` } type ConditionItem struct { Condition *ConditionGroup `json:"condition,omitempty"` SingleCondition *QueryCondition `json:"singleCondition,omitempty"` } type AdvancedQueryParams struct { ConditionGroups []ConditionGroup `json:"conditionGroups"` GroupLogic LogicOperator `json:"groupLogic"` } type AdvancedQueryRequest struct { AdvancedQuery *AdvancedQueryParams `json:"advancedQuery,omitempty"` BaseQueryParams } func NewConditionGroup(logic LogicOperator, conditions ...ConditionItem) ConditionGroup { return ConditionGroup{ Logic: logic, Conditions: conditions, } } func NewSingleCondition(field string, operator QueryOperator, value any) ConditionItem { return ConditionItem{ SingleCondition: &QueryCondition{ Field: field, Operator: operator, Value: value, }, } } func NewNestedConditionGroup(group ConditionGroup) ConditionItem { return ConditionItem{ Condition: &group, } } func NewAdvancedQueryParams(groupLogic LogicOperator, groups ...ConditionGroup) *AdvancedQueryParams { return &AdvancedQueryParams{ GroupLogic: groupLogic, ConditionGroups: groups, } } func Equal(field string, value any) ConditionItem { return NewSingleCondition(field, OperatorEqual, value) } func NotEqual(field string, value any) ConditionItem { return NewSingleCondition(field, OperatorNotEqual, value) } func GreaterThan(field string, value any) ConditionItem { return NewSingleCondition(field, OperatorGreaterThan, value) } func GreaterEqual(field string, value any) ConditionItem { return NewSingleCondition(field, OperatorGreaterEqual, value) } func LessThan(field string, value any) ConditionItem { return NewSingleCondition(field, OperatorLessThan, value) } func LessEqual(field string, value any) ConditionItem { return NewSingleCondition(field, OperatorLessEqual, value) } func Like(field string, value any) ConditionItem { return NewSingleCondition(field, OperatorLike, value) } func NotLike(field string, value any) ConditionItem { return NewSingleCondition(field, OperatorNotLike, value) } func StartsWith(field string, value any) ConditionItem { return NewSingleCondition(field, OperatorStartsWith, value) } func EndsWith(field string, value any) ConditionItem { return NewSingleCondition(field, OperatorEndsWith, value) } func IsNull(field string) ConditionItem { return NewSingleCondition(field, OperatorIsNull, nil) } func IsNotNull(field string) ConditionItem { return NewSingleCondition(field, OperatorIsNotNull, nil) } func In(field string, value any) ConditionItem { return NewSingleCondition(field, OperatorIn, value) } func NotIn(field string, value any) ConditionItem { return NewSingleCondition(field, OperatorNotIn, value) } func AndGroup(conditions ...ConditionItem) ConditionGroup { return NewConditionGroup(LogicAnd, conditions...) } func OrGroup(conditions ...ConditionItem) ConditionGroup { return NewConditionGroup(LogicOr, conditions...) } func AndQuery(groups ...ConditionGroup) *AdvancedQueryParams { return NewAdvancedQueryParams(LogicAnd, groups...) } func OrQuery(groups ...ConditionGroup) *AdvancedQueryParams { return NewAdvancedQueryParams(LogicOr, groups...) }