Browse Source

修改逻辑

yjp 1 year ago
parent
commit
a650e6ae73
4 changed files with 55 additions and 60 deletions
  1. 27 0
      client/data_source.go
  2. 20 41
      sdk/instance.go
  3. 1 12
      sdk/options.go
  4. 7 7
      sdk/sdk.go

+ 27 - 0
client/data_source.go

@@ -12,6 +12,7 @@ const (
 	createDataSourceUrl = "/ds/api/v1/dataSource/create"
 	deleteDataSourceUrl = "/ds/api/v1/dataSource/delete"
 	getDataSourcesUrl   = "/ds/api/v1/dataSource/query"
+	getDataSourceSpec   = "/ds/api/v1/dataSource/spec/get"
 )
 
 func (c *Client) CreateDataSource(token string, baseUrl string, namespace string, name string, typeStr string, spec map[string]any) error {
@@ -92,3 +93,29 @@ func (c *Client) GetDataSources(token string, baseUrl string, namespace string,
 
 	return resp.Infos, nil
 }
+
+func (c *Client) GetDataSourceSpec(token string, baseUrl string, namespace string, name string) (string, error) {
+	fullUrl, err := url.JoinPath(baseUrl, getDataSourceSpec)
+	if err != nil {
+		return "", err
+	}
+
+	resp := new(struct {
+		response.MsgResponse
+		Spec string `json:"spec"`
+	})
+
+	err = c.get(token, fullUrl, map[string]string{
+		"namespace": namespace,
+		"name":      name,
+	}, resp)
+	if err != nil {
+		return "", err
+	}
+
+	if !resp.Success {
+		return "", fmt.Errorf(resp.Msg)
+	}
+
+	return resp.Spec, nil
+}

+ 20 - 41
sdk/instance.go

@@ -1,9 +1,10 @@
 package sdk
 
 import (
+	"encoding/json"
+	"errors"
 	"git.sxidc.com/service-supports/ds-sdk/client"
 	"git.sxidc.com/service-supports/ds-sdk/db_operations"
-	"strings"
 )
 
 var sdkInstance *SDK
@@ -12,7 +13,7 @@ func GetInstance() *SDK {
 	return sdkInstance
 }
 
-func InitInstance(token string, baseUrl string, namespace string, dataSource *DataSourceOption, opts ...Option) error {
+func InitInstance(token string, baseUrl string, namespace string, dataSource string, opts ...Option) error {
 	if sdkInstance != nil {
 		return nil
 	}
@@ -30,17 +31,7 @@ func InitInstance(token string, baseUrl string, namespace string, dataSource *Da
 
 	c := client.New(options.timeout)
 
-	err := initNamespace(c, options)
-	if err != nil {
-		return err
-	}
-
-	err = initDataSource(c, options)
-	if err != nil {
-		return err
-	}
-
-	dbOperations, err := initDBOperations(options.dataSource.Spec)
+	dbOperations, err := initDBOperations(c, options)
 	if err != nil {
 		return err
 	}
@@ -54,46 +45,34 @@ func InitInstance(token string, baseUrl string, namespace string, dataSource *Da
 	return nil
 }
 
-func initNamespace(c *client.Client, options *Options) error {
-	namespaceInfos, err := c.GetNamespaces(options.token, options.baseUrl, options.namespace, 1, 1)
+func initDBOperations(c *client.Client, options *Options) (db_operations.DBOperations, error) {
+	dataSourceInfo, err := c.GetDataSources(options.token, options.baseUrl, options.namespace, options.dataSource,
+		"database", 0, 0)
 	if err != nil {
-		return err
-	}
-
-	if namespaceInfos != nil && len(namespaceInfos) != 0 {
-		return nil
+		return nil, err
 	}
 
-	err = c.CreateNamespace(options.token, options.baseUrl, options.namespace)
-	if err != nil && !strings.Contains(err.Error(), "已存在") {
-		return err
+	if dataSourceInfo == nil || len(dataSourceInfo) == 0 {
+		return nil, errors.New("不存在类型为database的数据源" + options.dataSource)
 	}
 
-	return nil
-}
-
-func initDataSource(c *client.Client, options *Options) error {
-	dataSourceInfos, err := c.GetDataSources(options.token, options.baseUrl, options.namespace,
-		options.dataSource.Name, options.dataSource.Type, 1, 1)
+	specStr, err := c.GetDataSourceSpec(options.token, options.baseUrl, options.namespace, options.dataSource)
 	if err != nil {
-		return err
+		return nil, err
 	}
 
-	if dataSourceInfos != nil && len(dataSourceInfos) != 0 {
-		return nil
+	specMap := make(map[string]any)
+	err = json.Unmarshal([]byte(specStr), &specMap)
+	if err != nil {
+		return nil, err
 	}
 
-	err = c.CreateDataSource(options.token, options.baseUrl, options.namespace,
-		options.dataSource.Name, options.dataSource.Type, options.dataSource.Spec)
-	if err != nil && !strings.Contains(err.Error(), "已存在") {
-		return err
+	dbOperations, err := db_operations.NewOperationsFromMap(specMap)
+	if err != nil {
+		return nil, err
 	}
 
-	return nil
-}
-
-func initDBOperations(dataSourceSpec map[string]any) (db_operations.DBOperations, error) {
-	return db_operations.NewOperationsFromMap(dataSourceSpec)
+	return dbOperations, nil
 }
 
 func DestroyInstance() error {

+ 1 - 12
sdk/options.go

@@ -12,23 +12,12 @@ func WithTimeout(timeout time.Duration) Option {
 	}
 }
 
-const (
-	DataSourceTypeDatabase         = "database"
-	DataSourceDatabaseTypePostgres = "postgres"
-)
-
-type DataSourceOption struct {
-	Name string
-	Type string
-	Spec map[string]any
-}
-
 type Options struct {
 	// 必传
 	token      string
 	baseUrl    string
 	namespace  string
-	dataSource *DataSourceOption
+	dataSource string
 
 	// 选传
 	timeout time.Duration

+ 7 - 7
sdk/sdk.go

@@ -25,7 +25,7 @@ func (s *SDK) CreateDataContainer(name string, spec map[string]any) error {
 	options := s.options
 
 	err := s.client.CreateDataContainer(options.token, options.baseUrl,
-		options.namespace, options.dataSource.Name, name, spec)
+		options.namespace, options.dataSource, name, spec)
 	if err != nil {
 		return err
 	}
@@ -41,7 +41,7 @@ func (s *SDK) DeleteDataContainer(name string) error {
 	options := s.options
 
 	err := s.client.DeleteDataContainer(options.token, options.baseUrl,
-		options.namespace, options.dataSource.Name, name)
+		options.namespace, options.dataSource, name)
 	if err != nil {
 		return err
 	}
@@ -53,7 +53,7 @@ func (s *SDK) GetDataContainers(name string, pageNo int, pageSize int) ([]client
 	options := s.options
 
 	return s.client.GetDataContainers(options.token, options.baseUrl,
-		options.namespace, options.dataSource.Name, name, pageNo, pageSize)
+		options.namespace, options.dataSource, name, pageNo, pageSize)
 }
 
 // TODO 增加Event版本的Container创建
@@ -66,7 +66,7 @@ func (s *SDK) ExecuteRawSql(sql string) ([]map[string]any, error) {
 	options := s.options
 
 	results, err := s.client.ExecuteRawSql(options.token, options.baseUrl,
-		options.namespace, options.dataSource.Name, sql)
+		options.namespace, options.dataSource, sql)
 	if err != nil {
 		return nil, err
 	}
@@ -82,7 +82,7 @@ func (s *SDK) CreateSQL(name string, spec map[string]any) error {
 	options := s.options
 
 	err := s.client.CreateSql(options.token, options.baseUrl,
-		options.namespace, options.dataSource.Name, name, spec)
+		options.namespace, options.dataSource, name, spec)
 	if err != nil {
 		return err
 	}
@@ -98,7 +98,7 @@ func (s *SDK) DeleteSQL(name string) error {
 	options := s.options
 
 	err := s.client.DeleteSql(options.token, options.baseUrl,
-		options.namespace, options.dataSource.Name, name)
+		options.namespace, options.dataSource, name)
 	if err != nil {
 		return err
 	}
@@ -114,7 +114,7 @@ func (s *SDK) ExecuteSql(name string, executeParams map[string]any) ([]map[strin
 	options := s.options
 
 	results, err := s.client.ExecuteSql(options.token, options.baseUrl,
-		options.namespace, options.dataSource.Name, name, executeParams)
+		options.namespace, options.dataSource, name, executeParams)
 	if err != nil {
 		return nil, err
 	}