Browse Source

修改接口

yjp 1 month ago
parent
commit
0ad8d41c06
1 changed files with 34 additions and 8 deletions
  1. 34 8
      convenient/domain/query_rule/query_rule.go

+ 34 - 8
convenient/domain/query_rule/query_rule.go

@@ -64,16 +64,20 @@ func (queryParams *BaseAdvanceQueryParams) GetPageSize() int {
 	return queryParams.PageSize
 }
 
+type FormAdditionalSelectClausesFunc func(queryParams AdvanceQueryParams) ([]string, error)
+type FormAdditionalFromFunc func(queryParams AdvanceQueryParams) ([]clause.Clause, error)
 type FormAdditionalConditionsFunc func(queryParams AdvanceQueryParams) (clause.Clause, error)
 type FormOtherClausesFunc func(queryParams AdvanceQueryParams) ([]clause.Clause, error)
 
 type AddUseQueryRuleQueryRouteParams struct {
-	DBSchema                     string
-	QueryParams                  AdvanceQueryParams
-	FormAdditionalConditionsFunc FormAdditionalConditionsFunc
-	FormOtherClausesFunc         FormOtherClausesFunc
-	Object                       domain.Object
-	QueryMiddlewares             []binding.Middleware
+	DBSchema                        string
+	QueryParams                     AdvanceQueryParams
+	FormAdditionalSelectClausesFunc FormAdditionalSelectClausesFunc
+	FormAdditionalFromFunc          FormAdditionalFromFunc
+	FormAdditionalConditionsFunc    FormAdditionalConditionsFunc
+	FormOtherClausesFunc            FormOtherClausesFunc
+	Object                          domain.Object
+	QueryMiddlewares                []binding.Middleware
 }
 
 func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQueryRuleQueryRouteParams) {
@@ -116,11 +120,33 @@ func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQ
 
 			var selectClause *clause.Select
 			var countClause *clause.Select
+			var fromClause *clause.From
 			var additionalConditions clause.Clause
+
+			selectClauses := make([]string, 0)
+			fromClauses := []clause.Clause{clause.TableName(domain.TableName(addParams.DBSchema, e))}
 			selectOtherClauses := make([]clause.Clause, 0)
 			countOtherClauses := make([]clause.Clause, 0)
 
-			fromClause := clause.NewFrom([]clause.Clause{clause.TableName(domain.TableName(addParams.DBSchema, e))})
+			if addParams.FormAdditionalSelectClausesFunc != nil {
+				additionalSelectClauses, err := addParams.FormAdditionalSelectClausesFunc(advanceQueryParams)
+				if err != nil {
+					return errResponse, err
+				}
+
+				selectClauses = additionalSelectClauses
+			}
+
+			if addParams.FormAdditionalFromFunc != nil {
+				additionalFromClauses, err := addParams.FormAdditionalFromFunc(advanceQueryParams)
+				if err != nil {
+					return errResponse, err
+				}
+
+				fromClauses = append(fromClauses, additionalFromClauses...)
+			}
+
+			fromClause = clause.NewFrom(fromClauses)
 			limitClause := clause.NewLimit(advanceQueryParams.GetPageNo(), advanceQueryParams.GetPageSize())
 
 			if addParams.FormAdditionalConditionsFunc != nil {
@@ -169,7 +195,7 @@ func AddUseQueryRuleQueryRoute[O any](binder *binding.Binder, addParams *AddUseQ
 				countOtherClauses = append(countOtherClauses, otherClauses...)
 			}
 
-			selectClause = clause.NewSelect(nil, fromClause, selectOtherClauses...)
+			selectClause = clause.NewSelect(selectClauses, fromClause, selectOtherClauses...)
 			countClause = clause.NewSelect([]string{"COUNT(*) AS total"}, fromClause, countOtherClauses...)
 
 			selectClauseStr, err := selectClause.Clause()