yjp 1 år sedan
förälder
incheckning
a17710cd22
4 ändrade filer med 97 tillägg och 42 borttagningar
  1. 33 23
      sdk/tag/sql_mapping.go
  2. 5 0
      sdk/tag/sql_result.go
  3. 6 0
      test/resources.yaml
  4. 53 19
      test/sdk_test.go

+ 33 - 23
sdk/sql_mapping/sql_mapping.go → sdk/tag/sql_mapping.go

@@ -1,4 +1,4 @@
-package sql_mapping
+package tag
 
 import (
 	"errors"
@@ -13,14 +13,16 @@ const (
 )
 
 const (
-	sqlMappingTagKey                 = "sqlmapping"
-	sqlMappingIgnore                 = "-"
-	sqlMappingColumn                 = "column"
-	sqlMappingKey                    = "key"
-	sqlMappingNotUpdate              = "notUpdate"
-	sqlMappingUpdateClear            = "updateClear"
-	sqlMappingNotQuery               = "notQuery"
-	sqlMappingQueryConditionCallback = "queryConditionCallback"
+	sqlMappingTagKey         = "sqlmapping"
+	sqlMappingIgnore         = "-"
+	sqlMappingColumn         = "column"
+	sqlMappingKey            = "key"
+	sqlMappingNotUpdate      = "notUpdate"
+	sqlMappingUpdateClear    = "updateClear"
+	sqlMappingNotQuery       = "notQuery"
+	sqlMappingInsertCallback = "insertCallback"
+	sqlMappingUpdateCallback = "updateCallback"
+	sqlMappingQueryCallback  = "queryCallback"
 )
 
 type SqlMapping struct {
@@ -62,22 +64,26 @@ func ParseSqlMapping(e any) (*SqlMapping, error) {
 }
 
 type SqlColumn struct {
-	Name                       string
-	IsKey                      bool
-	CanUpdate                  bool
-	CanUpdateClear             bool
-	CanQuery                   bool
-	NeedQueryConditionCallback bool
+	Name           string
+	IsKey          bool
+	CanUpdate      bool
+	CanUpdateClear bool
+	CanQuery       bool
+	InsertCallback bool
+	UpdateCallback bool
+	QueryCallback  bool
 }
 
 func parseSqlColumn(field reflect.StructField) (*SqlColumn, error) {
 	sqlColumn := &SqlColumn{
-		Name:                       strcase.ToSnake(field.Name),
-		IsKey:                      false,
-		CanUpdate:                  true,
-		CanUpdateClear:             false,
-		CanQuery:                   true,
-		NeedQueryConditionCallback: false,
+		Name:           strcase.ToSnake(field.Name),
+		IsKey:          false,
+		CanUpdate:      true,
+		CanUpdateClear: false,
+		CanQuery:       true,
+		InsertCallback: false,
+		UpdateCallback: false,
+		QueryCallback:  false,
 	}
 
 	sqlMappingTag, ok := field.Tag.Lookup(sqlMappingTagKey)
@@ -105,8 +111,12 @@ func parseSqlColumn(field reflect.StructField) (*SqlColumn, error) {
 				sqlColumn.CanUpdateClear = true
 			case sqlMappingNotQuery:
 				sqlColumn.CanQuery = false
-			case sqlMappingQueryConditionCallback:
-				sqlColumn.NeedQueryConditionCallback = true
+			case sqlMappingInsertCallback:
+				sqlColumn.InsertCallback = true
+			case sqlMappingUpdateCallback:
+				sqlColumn.UpdateCallback = true
+			case sqlMappingQueryCallback:
+				sqlColumn.QueryCallback = true
 			default:
 				continue
 			}

+ 5 - 0
sdk/tag/sql_result.go

@@ -0,0 +1,5 @@
+package tag
+
+type SqlResult struct {
+	ColumnMap map[string]SqlColumn
+}

+ 6 - 0
test/resources.yaml

@@ -41,6 +41,12 @@ spec:
         type: integer
         comment: 学生数量
         default: 60
+      - name: graduated_time
+        type: "timestamp with time zone"
+        comment: 毕业时间
       - name: created_time
         type: "timestamp with time zone"
         comment: 创建时间
+      - name: last_updated_time
+        type: "timestamp with time zone"
+        comment: 最近更新时间

+ 53 - 19
test/sdk_test.go

@@ -5,7 +5,7 @@ import (
 	"git.sxidc.com/go-tools/utils/strutils"
 	"git.sxidc.com/service-supports/ds-sdk/sdk"
 	"git.sxidc.com/service-supports/ds-sdk/sdk/raw_sql_tpl"
-	"git.sxidc.com/service-supports/ds-sdk/sdk/sql_mapping"
+	"git.sxidc.com/service-supports/ds-sdk/sdk/tag"
 	"math/rand"
 	"strconv"
 	"sync"
@@ -14,11 +14,13 @@ import (
 )
 
 type Class struct {
-	ID          string     `sqlmapping:"key;"`
-	Name        string     `sqlmapping:"update:canClear;notQuery;"`
-	StudentNum  int        `sqlmapping:"column:student_num;notUpdate;queryConditionCallback;result_column:studentNum"`
-	CreatedTime *time.Time `sqlmapping:"resultCallback"`
-	Ignored     string     `sqlmapping:"-"`
+	ID              string `sqlmapping:"key;"`
+	Name            string `sqlmapping:"update:canClear;notQuery;insertCallback;updateCallback;"`
+	StudentNum      int    `sqlmapping:"column:student_num;notUpdate;queryCallback;"`
+	GraduatedTime   time.Time
+	CreatedTime     *time.Time
+	LastUpdatedTime time.Time
+	Ignored         string `sqlmapping:"-"`
 }
 
 const (
@@ -43,6 +45,8 @@ func TestBasic(t *testing.T) {
 	classID := strutils.SimpleUUID()
 	className := strutils.SimpleUUID()
 	studentNum := rand.Int31n(100)
+	now := time.Now()
+	nowStr := now.Format(time.DateTime + ".000000 +08:00")
 
 	insertExecuteParams, err := raw_sql_tpl.InsertExecuteParams{
 		TableName: tableName,
@@ -59,9 +63,17 @@ func TestBasic(t *testing.T) {
 				Column: "student_num",
 				Value:  strconv.FormatInt(int64(studentNum), 10),
 			},
+			{
+				Column: "graduated_time",
+				Value:  "'" + nowStr + "'",
+			},
 			{
 				Column: "created_time",
-				Value:  "'" + time.Now().Format(time.DateTime+".000000 +08:00") + "'",
+				Value:  "'" + nowStr + "'",
+			},
+			{
+				Column: "last_updated_time",
+				Value:  "'" + nowStr + "'",
 			},
 		},
 	}.Map()
@@ -144,8 +156,8 @@ func TestRawSqlTemplate(t *testing.T) {
 	newStudentNum := rand.Int31n(100)
 
 	now := time.Now()
-	createdTime := now.Format(time.DateTime + ".000000 +08:00")
-	execeptedCreatedTime := now.Format("2006-01-02T15:04:05.000000+08:00")
+	nowStr := now.Format(time.DateTime + ".000000 +08:00")
+	exceptedNowStr := now.Format("2006-01-02T15:04:05.000000+08:00")
 
 	insertExecuteParams, err := raw_sql_tpl.InsertExecuteParams{
 		TableName: tableName,
@@ -162,9 +174,17 @@ func TestRawSqlTemplate(t *testing.T) {
 				Column: "student_num",
 				Value:  strconv.FormatInt(int64(studentNum), 10),
 			},
+			{
+				Column: "graduated_time",
+				Value:  "'" + nowStr + "'",
+			},
 			{
 				Column: "created_time",
-				Value:  "'" + createdTime + "'",
+				Value:  "'" + nowStr + "'",
+			},
+			{
+				Column: "last_updated_time",
+				Value:  "'" + nowStr + "'",
 			},
 		},
 	}.Map()
@@ -210,7 +230,7 @@ func TestRawSqlTemplate(t *testing.T) {
 
 	queryExecuteParams, err := raw_sql_tpl.QueryExecuteParams{
 		TableName:     tableName,
-		SelectColumns: []string{"id", "name", "student_num as student_num_alias", "created_time"},
+		SelectColumns: []string{"id", "name", "student_num as student_num_alias", "graduated_time", "created_time", "last_updated_time"},
 		Conditions: []raw_sql_tpl.Condition{
 			{
 				Column: "id",
@@ -234,7 +254,7 @@ func TestRawSqlTemplate(t *testing.T) {
 
 	newQueryExecuteParams, err := raw_sql_tpl.QueryExecuteParams{
 		TableName:     tableName,
-		SelectColumns: []string{"id", "name", "student_num as student_num_alias", "created_time"},
+		SelectColumns: []string{"id", "name", "student_num as student_num_alias", "graduated_time", "created_time", "last_updated_time"},
 		Conditions: []raw_sql_tpl.Condition{
 			{
 				Column: "id",
@@ -332,7 +352,9 @@ func TestRawSqlTemplate(t *testing.T) {
 	if queryResults[0]["id"].(string) != classID ||
 		queryResults[0]["name"].(string) != className ||
 		queryResults[0]["student_num_alias"].(float64) != float64(studentNum) ||
-		queryResults[0]["created_time"].(string) != execeptedCreatedTime {
+		queryResults[0]["graduated_time"].(string) != exceptedNowStr ||
+		queryResults[0]["created_time"].(string) != exceptedNowStr ||
+		queryResults[0]["last_updated_time"].(string) != exceptedNowStr {
 		t.Fatal("查询数据不正确")
 	}
 
@@ -358,7 +380,9 @@ func TestRawSqlTemplate(t *testing.T) {
 	if queryResults[0]["id"].(string) != classID ||
 		queryResults[0]["name"].(string) != newClassName ||
 		queryResults[0]["student_num_alias"].(float64) != float64(newStudentNum) ||
-		queryResults[0]["created_time"].(string) != execeptedCreatedTime {
+		queryResults[0]["graduated_time"].(string) != exceptedNowStr ||
+		queryResults[0]["created_time"].(string) != exceptedNowStr ||
+		queryResults[0]["last_updated_time"].(string) != exceptedNowStr {
 		t.Fatal("查询数据不正确")
 	}
 
@@ -369,19 +393,21 @@ func TestRawSqlTemplate(t *testing.T) {
 }
 
 func TestDataMapping(t *testing.T) {
-	sqlMapping, err := sql_mapping.ParseSqlMapping(&Class{})
+	sqlMapping, err := tag.ParseSqlMapping(&Class{})
 	if err != nil {
 		t.Fatal(err)
 	}
 
 	for columnName, sqlColumn := range sqlMapping.ColumnMap {
 		if columnName != "id" && columnName != "name" &&
-			columnName != "student_num" && columnName != "created_time" {
+			columnName != "student_num" && columnName != "graduated_time" &&
+			columnName != "created_time" && columnName != "last_updated_time" {
 			t.Fatal("列名不正确")
 		}
 
 		if sqlColumn.Name != "id" && sqlColumn.Name != "name" &&
-			sqlColumn.Name != "student_num" && columnName != "created_time" {
+			sqlColumn.Name != "student_num" && columnName != "graduated_time" &&
+			columnName != "created_time" && columnName != "last_updated_time" {
 			t.Fatal("列名不正确")
 		}
 
@@ -405,8 +431,16 @@ func TestDataMapping(t *testing.T) {
 			t.Fatal("可清除字段不正确")
 		}
 
-		if sqlColumn.NeedQueryConditionCallback && columnName != "student_num" {
-			t.Fatal("可清除字段不正确")
+		if sqlColumn.InsertCallback && columnName != "name" {
+			t.Fatal("插入回调不正确")
+		}
+
+		if sqlColumn.UpdateCallback && columnName != "name" {
+			t.Fatal("更新回调不正确")
+		}
+
+		if sqlColumn.QueryCallback && columnName != "student_num" {
+			t.Fatal("查询回调不正确")
 		}
 	}
 }