yjp 1 vuosi sitten
vanhempi
commit
f776d03ed9

+ 11 - 5
convenient/relation/one2many/service.go

@@ -267,23 +267,29 @@ func QueryRight[LI any](rightTableName string, rightRelationFieldName string, le
 		}
 
 		// right存在性校验
-		rightExist, err := database.CheckExist(dbExecutor, &sql.CheckExistExecuteParams{
+		existRightResult, err := database.QueryOne(dbExecutor, &sql.QueryOneExecuteParams{
 			TableName:  rightTableName,
 			Conditions: sql.NewConditions().Equal(entity.ColumnID, rightEntity.GetID()),
 		})
 		if err != nil {
+			if database.IsErrorDBRecordNotExist(err) {
+				return outputZero, fserr.New(rightEntity.DomainCNName() + "不存在")
+			}
+
 			return outputZero, err
 		}
 
-		if !rightExist {
-			return outputZero, fserr.New(rightEntity.DomainCNName() + "不存在")
+		existRightEntity := reflect.New(reflect.TypeOf(object).Elem()).Interface()
+		err = sql.ParseSqlResult(existRightResult, existRightEntity)
+		if err != nil {
+			return outputZero, err
 		}
 
-		if !domain.HasField(object, rightRelationFieldName) {
+		if !domain.HasField(existRightEntity, rightRelationFieldName) {
 			return outputZero, fserr.New("关联字段" + rightRelationFieldName + "不存在")
 		}
 
-		leftID, err := domain.Field[string](object, rightRelationFieldName)
+		leftID, err := domain.Field[string](existRightEntity, rightRelationFieldName)
 		if err != nil {
 			return outputZero, err
 		}

+ 1 - 1
convenient/relation/one2many/simple.go

@@ -48,7 +48,7 @@ func (simple *Simple[LI, RI]) bind(binder *binding.Binder) {
 	leftDomainPath := entity.RelativeDomainPath(simple.Left)
 	rightDomainPath := entity.RelativeDomainPath(simple.Right)
 
-	leftRelationFieldName := fmt.Sprintf("%sID", simple.Right.DomainCamelName())
+	leftRelationFieldName := fmt.Sprintf("%sIDs", simple.Right.DomainCamelName())
 	rightRelationFieldName := fmt.Sprintf("%sID", simple.Left.DomainCamelName())
 
 	leftTableName := entity.TableName(simple.Schema, simple.Left)

+ 20 - 5
convenient/relation/one2one/service.go

@@ -130,7 +130,7 @@ func Update(fromTableName string, fromRelationFieldName string, fromRelationColu
 	}
 }
 
-func Query[TI any](fromTableName string, toTableName string, toRelationColumnName string) binding.ServiceFunc[TI] {
+func Query[TI any](fromTableName string, fromRelationFieldName string, toTableName string, toRelationColumnName string) binding.ServiceFunc[TI] {
 	return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (TI, error) {
 		outputZero := reflectutils.Zero[TI]()
 
@@ -147,21 +147,36 @@ func Query[TI any](fromTableName string, toTableName string, toRelationColumnNam
 		}
 
 		// from存在性校验
-		fromExist, err := database.CheckExist(dbExecutor, &sql.CheckExistExecuteParams{
+		existFromResult, err := database.QueryOne(dbExecutor, &sql.QueryOneExecuteParams{
 			TableName:  fromTableName,
 			Conditions: sql.NewConditions().Equal(entity.ColumnID, fromEntity.GetID()),
 		})
 		if err != nil {
+			if database.IsErrorDBRecordNotExist(err) {
+				return outputZero, fserr.New(fromEntity.DomainCNName() + "不存在")
+			}
+
 			return outputZero, err
 		}
 
-		if !fromExist {
-			return outputZero, fserr.New(fromEntity.DomainCNName() + "不存在")
+		existFromEntity := reflect.New(reflect.TypeOf(object).Elem()).Interface()
+		err = sql.ParseSqlResult(existFromResult, existFromEntity)
+		if err != nil {
+			return outputZero, err
+		}
+
+		if !domain.HasField(existFromEntity, fromRelationFieldName) {
+			return outputZero, fserr.New("关联字段" + fromRelationFieldName + "不存在")
+		}
+
+		toID, err := domain.Field[string](existFromEntity, fromRelationFieldName)
+		if err != nil {
+			return outputZero, err
 		}
 
 		toResult, err := database.QueryOne(dbExecutor, &sql.QueryOneExecuteParams{
 			TableName:  toTableName,
-			Conditions: sql.NewConditions().Equal(toRelationColumnName, fromEntity.GetID()),
+			Conditions: sql.NewConditions().Equal(entity.ColumnID, toID),
 		})
 		if err != nil && !database.IsErrorDBRecordNotExist(err) {
 			return outputZero, err

+ 2 - 2
convenient/relation/one2one/simple.go

@@ -79,7 +79,7 @@ func (simple *Simple[LI, RI]) bind(binder *binding.Binder) {
 				ResponseFunc:  response.SendInfoResponse[RI],
 				RequestParams: simple.LeftQueryQueryParams,
 				Objects:       []domain.Object{simple.Left},
-				ServiceFunc:   Query[RI](leftTableName, rightTableName, rightRelationColumnName),
+				ServiceFunc:   Query[RI](leftTableName, leftRelationColumnName, rightTableName, rightRelationColumnName),
 			})
 		}
 
@@ -115,7 +115,7 @@ func (simple *Simple[LI, RI]) bind(binder *binding.Binder) {
 				ResponseFunc:  response.SendInfoResponse[LI],
 				RequestParams: simple.RightQueryQueryParams,
 				Objects:       []domain.Object{simple.Right},
-				ServiceFunc:   Query[LI](rightTableName, leftTableName, leftRelationColumnName),
+				ServiceFunc:   Query[LI](rightTableName, rightRelationColumnName, leftTableName, leftRelationColumnName),
 			})
 		}
 

+ 1 - 1
examples/examples/project/application/domain/student/entity.go

@@ -18,7 +18,7 @@ type Entity struct {
 	entity.Base
 	Name        string   `sqlmapping:"column:name" sqlresult:"column:name"`
 	FamilyID    string   `sqlmapping:"column:family_id" sqlresult:"column:family_id"`
-	ClassID     []string `sqlmapping:"column:class_id" sqlresult:"column:class_id"`
+	ClassID     string   `sqlmapping:"column:class_id" sqlresult:"column:class_id"`
 	IdentityIDs []string `sqlmapping:"-" sqlresult:"-"`
 	HobbyIDs    []string `sqlmapping:"-" sqlresult:"-"`
 	entity.TimeFields

+ 0 - 0
examples/examples/project/deployment/data_service/apply_data_containers.sh


+ 11 - 2
examples/examples/project/main.go

@@ -42,15 +42,24 @@ import (
 // curl -X GET "http://localhost:31000/example/v1/identity/get?id=6e12ee71397746b8920fa94e5f229366"
 // curl -X DELETE "http://localhost:31000/example/v1/identity/6e12ee71397746b8920fa94e5f229366/delete"
 
+// Class-Student
+// curl -X POST -H "Content-Type: application/json" -d '{"id":"4199572c46494fd49d9179f095a44c48", "studentIds": ["31934e95b8ef414b9dae5c31dd8bf2bb"]}' "http://localhost:31000/example/v1/class/student/update"
+// curl -X GET "http://localhost:31000/example/v1/class/student/query?id=4199572c46494fd49d9179f095a44c48"
+
+// Student-Class
+// curl -X POST -H "Content-Type: application/json" -d '{"id":"31934e95b8ef414b9dae5c31dd8bf2bb", "classId": "4199572c46494fd49d9179f095a44c48"}' "http://localhost:31000/example/v1/student/class/update"
+// curl -X GET "http://localhost:31000/example/v1/student/class/query?id=31934e95b8ef414b9dae5c31dd8bf2bb"
+// curl -X GET "http://localhost:31000/example/v1/student/class/queryWith?name=test"
+
 // Student-Family
 // curl -X POST -H "Content-Type: application/json" -d '{"id":"fc3e96926aac46268ae783c4ad675d43", "familyId": "ed86bbb59a80429eb654d7f9f13ff116"}' "http://localhost:31000/example/v1/student/family/update"
 // curl -X GET "http://localhost:31000/example/v1/student/family/query?id=fc3e96926aac46268ae783c4ad675d43"
-// curl -X GET "http://localhost:31000/example/v1/student/family/queryWith?id=fc3e96926aac46268ae783c4ad675d43"
+// curl -X GET "http://localhost:31000/example/v1/student/family/queryWith?name=test"
 
 // Family-Student
 // curl -X POST -H "Content-Type: application/json" -d '{"id":"ed86bbb59a80429eb654d7f9f13ff116", "studentId": "fc3e96926aac46268ae783c4ad675d43"}' "http://localhost:31000/example/v1/family/student/update"
 // curl -X GET "http://localhost:31000/example/v1/family/student/query?id=ed86bbb59a80429eb654d7f9f13ff116"
-// curl -X GET "http://localhost:31000/example/v1/family/student/queryWith?id=ed86bbb59a80429eb654d7f9f13ff116"
+// curl -X GET "http://localhost:31000/example/v1/family/student/queryWith?name=test"
 
 // Student-Identity
 // curl -X POST -H "Content-Type: application/json" -d '{"id":"d21d93c7f189441fac5d27f14fdce13b", "identityIds": ["42b305bb292c4082a3e91a2967fe303c"]}' "http://localhost:31000/example/v1/student/identity/update"

+ 0 - 2
framwork/infrastructure/database/sql/value.go

@@ -12,8 +12,6 @@ const (
 	timeWriteFormat = time.DateTime + ".000000 +08:00"
 )
 
-var keyWordsMap = map[string]any{}
-
 func toSqlValue(value any) (string, error) {
 	if value == nil {
 		return "", nil