advanced_query.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package managesdk
  2. type QueryOperator string
  3. const (
  4. OperatorEqual QueryOperator = "="
  5. OperatorNotEqual QueryOperator = "!="
  6. OperatorGreaterThan QueryOperator = ">"
  7. OperatorGreaterEqual QueryOperator = ">="
  8. OperatorLessThan QueryOperator = "<"
  9. OperatorLessEqual QueryOperator = "<="
  10. OperatorLike QueryOperator = "like"
  11. OperatorNotLike QueryOperator = "not_like"
  12. OperatorStartsWith QueryOperator = "starts_with"
  13. OperatorEndsWith QueryOperator = "ends_with"
  14. OperatorIsNull QueryOperator = "is_null"
  15. OperatorIsNotNull QueryOperator = "is_not_null"
  16. OperatorIn QueryOperator = "in"
  17. OperatorNotIn QueryOperator = "not_in"
  18. )
  19. type LogicOperator string
  20. const (
  21. LogicAnd LogicOperator = "AND"
  22. LogicOr LogicOperator = "OR"
  23. )
  24. type QueryCondition struct {
  25. Field string `json:"field"`
  26. Operator QueryOperator `json:"operator"`
  27. Value any `json:"value,omitempty"`
  28. }
  29. type ConditionGroup struct {
  30. Conditions []ConditionItem `json:"conditions"`
  31. Logic LogicOperator `json:"logic"`
  32. }
  33. type ConditionItem struct {
  34. Condition *ConditionGroup `json:"condition,omitempty"`
  35. SingleCondition *QueryCondition `json:"singleCondition,omitempty"`
  36. }
  37. type AdvancedQueryParams struct {
  38. ConditionGroups []ConditionGroup `json:"conditionGroups"`
  39. GroupLogic LogicOperator `json:"groupLogic"`
  40. }
  41. type AdvancedQueryRequest struct {
  42. AdvancedQuery *AdvancedQueryParams `json:"advancedQuery,omitempty"`
  43. BaseQueryParams
  44. }
  45. func NewConditionGroup(logic LogicOperator, conditions ...ConditionItem) ConditionGroup {
  46. return ConditionGroup{
  47. Logic: logic,
  48. Conditions: conditions,
  49. }
  50. }
  51. func NewSingleCondition(field string, operator QueryOperator, value any) ConditionItem {
  52. return ConditionItem{
  53. SingleCondition: &QueryCondition{
  54. Field: field,
  55. Operator: operator,
  56. Value: value,
  57. },
  58. }
  59. }
  60. func NewNestedConditionGroup(group ConditionGroup) ConditionItem {
  61. return ConditionItem{
  62. Condition: &group,
  63. }
  64. }
  65. func NewAdvancedQueryParams(groupLogic LogicOperator, groups ...ConditionGroup) *AdvancedQueryParams {
  66. return &AdvancedQueryParams{
  67. GroupLogic: groupLogic,
  68. ConditionGroups: groups,
  69. }
  70. }
  71. func Equal(field string, value any) ConditionItem {
  72. return NewSingleCondition(field, OperatorEqual, value)
  73. }
  74. func NotEqual(field string, value any) ConditionItem {
  75. return NewSingleCondition(field, OperatorNotEqual, value)
  76. }
  77. func GreaterThan(field string, value any) ConditionItem {
  78. return NewSingleCondition(field, OperatorGreaterThan, value)
  79. }
  80. func GreaterEqual(field string, value any) ConditionItem {
  81. return NewSingleCondition(field, OperatorGreaterEqual, value)
  82. }
  83. func LessThan(field string, value any) ConditionItem {
  84. return NewSingleCondition(field, OperatorLessThan, value)
  85. }
  86. func LessEqual(field string, value any) ConditionItem {
  87. return NewSingleCondition(field, OperatorLessEqual, value)
  88. }
  89. func Like(field string, value any) ConditionItem {
  90. return NewSingleCondition(field, OperatorLike, value)
  91. }
  92. func NotLike(field string, value any) ConditionItem {
  93. return NewSingleCondition(field, OperatorNotLike, value)
  94. }
  95. func StartsWith(field string, value any) ConditionItem {
  96. return NewSingleCondition(field, OperatorStartsWith, value)
  97. }
  98. func EndsWith(field string, value any) ConditionItem {
  99. return NewSingleCondition(field, OperatorEndsWith, value)
  100. }
  101. func IsNull(field string) ConditionItem {
  102. return NewSingleCondition(field, OperatorIsNull, nil)
  103. }
  104. func IsNotNull(field string) ConditionItem {
  105. return NewSingleCondition(field, OperatorIsNotNull, nil)
  106. }
  107. func In(field string, value any) ConditionItem {
  108. return NewSingleCondition(field, OperatorIn, value)
  109. }
  110. func NotIn(field string, value any) ConditionItem {
  111. return NewSingleCondition(field, OperatorNotIn, value)
  112. }
  113. func AndGroup(conditions ...ConditionItem) ConditionGroup {
  114. return NewConditionGroup(LogicAnd, conditions...)
  115. }
  116. func OrGroup(conditions ...ConditionItem) ConditionGroup {
  117. return NewConditionGroup(LogicOr, conditions...)
  118. }
  119. func AndQuery(groups ...ConditionGroup) *AdvancedQueryParams {
  120. return NewAdvancedQueryParams(LogicAnd, groups...)
  121. }
  122. func OrQuery(groups ...ConditionGroup) *AdvancedQueryParams {
  123. return NewAdvancedQueryParams(LogicOr, groups...)
  124. }