|
|
@@ -19,7 +19,7 @@ import (
|
|
|
)
|
|
|
|
|
|
func UpdateLeft(leftTableName string, leftDomainCNName string, leftRelationFieldName string,
|
|
|
- rightTableName string, rightRelationColumnName string) binding.ServiceFunc[any] {
|
|
|
+ rightTableName string, rightDomainCNName string, rightRelationColumnName string) binding.ServiceFunc[any] {
|
|
|
return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (any, error) {
|
|
|
object := objects[0]
|
|
|
if object == nil {
|
|
|
@@ -95,7 +95,7 @@ func UpdateLeft(leftTableName string, leftDomainCNName string, leftRelationField
|
|
|
}
|
|
|
|
|
|
if int(rightCount) != len(rightIDs) {
|
|
|
- return fserr.New("部分{{ $toCNName }}不存在")
|
|
|
+ return fserr.New("部分" + rightDomainCNName + "不存在")
|
|
|
}
|
|
|
|
|
|
err = database.Update(tx, &sql.UpdateExecuteParams{
|
|
|
@@ -306,8 +306,10 @@ func QueryRight[LI any](rightTableName string, rightRelationFieldName string, le
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func QueryRightWithLeftInfo[RI any, LI any](rightTableName string, leftTableName string) binding.ServiceFunc[map[string]any] {
|
|
|
- return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (map[string]any, error) {
|
|
|
+type ConditionFieldCallback func(conditions *sql.Conditions, fieldName string, columnName string, value any) (hasDeal bool)
|
|
|
+
|
|
|
+func QueryRightWithLeftInfo[RI any, LI any](rightTableName string, rightRelationColumnName string, rightFieldCallback ConditionFieldCallback, leftTableName string) binding.ServiceFunc[response.InfosData[map[string]any]] {
|
|
|
+ return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (response.InfosData[map[string]any], error) {
|
|
|
errResponse := response.InfosData[map[string]any]{
|
|
|
Infos: make([]map[string]any, 0),
|
|
|
}
|
|
|
@@ -328,34 +330,34 @@ func QueryRightWithLeftInfo[RI any, LI any](rightTableName string, leftTableName
|
|
|
return errResponse, fserr.New("请求参数不是Query接口")
|
|
|
}
|
|
|
|
|
|
- fromEntity, ok := object.(entity.Entity)
|
|
|
+ rightEntity, ok := object.(entity.Entity)
|
|
|
if !ok {
|
|
|
return errResponse, fserr.New("领域对象不是实体")
|
|
|
}
|
|
|
|
|
|
conditions := sql.NewConditions()
|
|
|
|
|
|
- fromFields, err := sql_mapping.DefaultUsage(fromEntity)
|
|
|
+ rightFields, err := sql_mapping.DefaultUsage(rightEntity)
|
|
|
if err != nil {
|
|
|
return errResponse, err
|
|
|
}
|
|
|
|
|
|
- for _, fromField := range fromFields {
|
|
|
+ for _, rightField := range rightFields {
|
|
|
hasDeal := false
|
|
|
- if fromFieldCallback != nil {
|
|
|
- hasDeal = fromFieldCallback(conditions, fromField.FieldName, fromField.ColumnName, fromField.Value)
|
|
|
+ if rightFieldCallback != nil {
|
|
|
+ hasDeal = rightFieldCallback(conditions, rightField.FieldName, rightField.ColumnName, rightField.Value)
|
|
|
}
|
|
|
|
|
|
if !hasDeal {
|
|
|
- fieldValue := reflect.ValueOf(fromField.Value)
|
|
|
+ fieldValue := reflect.ValueOf(rightField.Value)
|
|
|
if !fieldValue.IsZero() {
|
|
|
- conditions.Equal(fromField.ColumnName, fromField.Value)
|
|
|
+ conditions.Equal(rightField.ColumnName, rightField.Value)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- fromResults, totalCount, err := database.Query(dbExecutor, &sql.QueryExecuteParams{
|
|
|
- TableName: fromTableName,
|
|
|
+ rightResults, totalCount, err := database.Query(dbExecutor, &sql.QueryExecuteParams{
|
|
|
+ TableName: rightTableName,
|
|
|
Conditions: conditions,
|
|
|
PageNo: queryParams.GetPageNo(),
|
|
|
PageSize: queryParams.GetPageSize(),
|
|
|
@@ -364,7 +366,7 @@ func QueryRightWithLeftInfo[RI any, LI any](rightTableName string, leftTableName
|
|
|
return errResponse, nil
|
|
|
}
|
|
|
|
|
|
- if fromResults == nil || len(fromResults) == 0 {
|
|
|
+ if rightResults == nil || len(rightResults) == 0 {
|
|
|
return response.InfosData[map[string]any]{
|
|
|
Infos: make([]map[string]any, 0),
|
|
|
TotalCount: 0,
|
|
|
@@ -372,64 +374,64 @@ func QueryRightWithLeftInfo[RI any, LI any](rightTableName string, leftTableName
|
|
|
}, nil
|
|
|
}
|
|
|
|
|
|
- toIDs := make([]string, 0)
|
|
|
- for _, fromResult := range fromResults {
|
|
|
- toID := fromResult.ColumnValueString(fromRelationColumnName)
|
|
|
- if strutils.IsStringNotEmpty(toID) {
|
|
|
- toIDs = append(toIDs, toID)
|
|
|
+ leftIDs := make([]string, 0)
|
|
|
+ for _, rightResult := range rightResults {
|
|
|
+ leftID := rightResult.ColumnValueString(rightRelationColumnName)
|
|
|
+ if strutils.IsStringNotEmpty(leftID) {
|
|
|
+ leftIDs = append(leftIDs, leftID)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- toResults, _, err := database.Query(dbExecutor, &sql.QueryExecuteParams{
|
|
|
- TableName: toTableName,
|
|
|
- Conditions: sql.NewConditions().In(entity.ColumnID, toIDs),
|
|
|
+ leftResults, _, err := database.Query(dbExecutor, &sql.QueryExecuteParams{
|
|
|
+ TableName: leftTableName,
|
|
|
+ Conditions: sql.NewConditions().In(entity.ColumnID, leftIDs),
|
|
|
})
|
|
|
if err != nil {
|
|
|
return errResponse, err
|
|
|
}
|
|
|
|
|
|
- toResultMap := make(map[string]sql.Result)
|
|
|
- for _, toResult := range toResults {
|
|
|
- toID := toResult.ColumnValueString(entity.ColumnID)
|
|
|
- toResultMap[toID] = toResult
|
|
|
+ leftResultMap := make(map[string]sql.Result)
|
|
|
+ for _, leftResult := range leftResults {
|
|
|
+ leftID := leftResult.ColumnValueString(entity.ColumnID)
|
|
|
+ leftResultMap[leftID] = leftResult
|
|
|
}
|
|
|
|
|
|
- infos := make([]map[string]any, len(fromResults))
|
|
|
- for index, fromResult := range fromResults {
|
|
|
- fromInfo := reflectutils.Zero[FI]()
|
|
|
- toInfo := reflectutils.Zero[FI]()
|
|
|
+ infos := make([]map[string]any, len(rightResults))
|
|
|
+ for index, rightResult := range rightResults {
|
|
|
+ rightInfo := reflectutils.Zero[RI]()
|
|
|
+ leftInfo := reflectutils.Zero[LI]()
|
|
|
|
|
|
- err = sql.ParseSqlResult(fromResult, &fromInfo)
|
|
|
+ err = sql.ParseSqlResult(rightResult, &rightInfo)
|
|
|
if err != nil {
|
|
|
return errResponse, err
|
|
|
}
|
|
|
|
|
|
- toID := fromResult.ColumnValueString(fromRelationColumnName)
|
|
|
- if strutils.IsStringEmpty(toID) {
|
|
|
+ leftID := rightResult.ColumnValueString(rightRelationColumnName)
|
|
|
+ if strutils.IsStringEmpty(leftID) {
|
|
|
infos[index] = map[string]any{
|
|
|
- "self": fromInfo,
|
|
|
- "with": toInfo,
|
|
|
+ "self": rightInfo,
|
|
|
+ "with": leftInfo,
|
|
|
}
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
- toResult, ok := toResultMap[toID]
|
|
|
+ leftResult, ok := leftResultMap[leftID]
|
|
|
if !ok {
|
|
|
infos[index] = map[string]any{
|
|
|
- "self": fromInfo,
|
|
|
- "with": toInfo,
|
|
|
+ "self": rightInfo,
|
|
|
+ "with": leftInfo,
|
|
|
}
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
- err = sql.ParseSqlResult(toResult, &toInfo)
|
|
|
+ err = sql.ParseSqlResult(leftResult, &leftInfo)
|
|
|
if err != nil {
|
|
|
return errResponse, err
|
|
|
}
|
|
|
|
|
|
infos[index] = map[string]any{
|
|
|
- "self": fromInfo,
|
|
|
- "with": toInfo,
|
|
|
+ "self": rightInfo,
|
|
|
+ "with": leftInfo,
|
|
|
}
|
|
|
}
|
|
|
|