yjp 1 tahun lalu
induk
melakukan
98794a696d
4 mengubah file dengan 32 tambahan dan 7 penghapusan
  1. 1 0
      go.mod
  2. 2 0
      go.sum
  3. 22 0
      sdk/sql.go
  4. 7 7
      test/sdk_test.go

+ 1 - 0
go.mod

@@ -8,6 +8,7 @@ require (
 	github.com/fatih/structs v1.1.0
 	github.com/golang/protobuf v1.5.4
 	github.com/iancoleman/strcase v0.3.0
+	github.com/mitchellh/mapstructure v1.5.0
 	github.com/mwitkow/go-proto-validators v0.3.2
 	google.golang.org/grpc v1.63.2
 	google.golang.org/protobuf v1.33.0

+ 2 - 0
go.sum

@@ -76,6 +76,8 @@ github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
 github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
 github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
 github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=

+ 22 - 0
sdk/sql.go

@@ -5,6 +5,7 @@ import (
 	"git.sxidc.com/go-tools/utils/strutils"
 	"git.sxidc.com/service-supports/ds-sdk/sdk/raw_sql_tpl"
 	"git.sxidc.com/service-supports/ds-sdk/sdk/tag"
+	"github.com/mitchellh/mapstructure"
 	"reflect"
 	"strings"
 	"time"
@@ -726,3 +727,24 @@ func ExecuteSql(executor SqlExecutor, name string, executeParams map[string]any)
 
 	return tableRows, nil
 }
+
+const (
+	sqlResultTimeFormat = "2006-01-02T15:04:05.000000+08:00"
+)
+
+func parseSqlResults(results any, e any) error {
+	decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
+		DecodeHook: mapstructure.StringToTimeHookFunc(sqlResultTimeFormat),
+		Result:     e,
+	})
+	if err != nil {
+		return err
+	}
+
+	err = decoder.Decode(results)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}

+ 7 - 7
test/sdk_test.go

@@ -14,13 +14,13 @@ import (
 )
 
 type Class struct {
-	ID              string    `sqlmapping:"key;"`
-	Name            string    `sqlmapping:"updateClear;notQuery;insertCallback;updateCallback;"`
-	StudentNum      int       `sqlmapping:"column:student_num;notUpdate;queryCallback;countCallback;checkExistCallback;checkHasOnlyCallback;" sqlresult:"column:student_num_alias;"`
-	GraduatedTime   time.Time `sqlresult:"callback"`
-	CreatedTime     *time.Time
-	LastUpdatedTime time.Time
-	Ignored         string `sqlmapping:"-" sqlresult:"-"`
+	ID              string     `sqlmapping:"key;" mapstructure:"id"`
+	Name            string     `sqlmapping:"updateClear;notQuery;insertCallback;updateCallback;" mapstructure:"name"`
+	StudentNum      int        `sqlmapping:"column:student_num;notUpdate;queryCallback;countCallback;checkExistCallback;checkHasOnlyCallback;" mapstructure:"student_num_alias"`
+	GraduatedTime   time.Time  `sqlresult:"callback" mapstructure:"graduated_time"`
+	CreatedTime     *time.Time `mapstructure:"created_time"`
+	LastUpdatedTime time.Time  `mapstructure:"last_updated_time"`
+	Ignored         string     `sqlmapping:"-" mapstructure:"-"`
 }
 
 const (