Parcourir la source

fix: endpoints apis

Yeuoly il y a 9 mois
Parent
commit
df95e36048

+ 3 - 6
internal/db/pgsql.go

@@ -2,7 +2,6 @@ package db
 
 import (
 	"fmt"
-	"strings"
 
 	"github.com/langgenius/dify-plugin-daemon/internal/utils/log"
 	"gorm.io/gorm"
@@ -163,13 +162,11 @@ func Inc[T genericComparableConstraint](updates map[string]T) GenericQuery {
 
 func Dec[T genericComparableConstraint](updates map[string]T) GenericQuery {
 	return func(tx *gorm.DB) *gorm.DB {
-		expressions := make([]string, 0, len(updates))
-		values := make([]interface{}, 0, len(updates))
+		m := make(map[string]any)
 		for field, value := range updates {
-			expressions = append(expressions, fmt.Sprintf("%s = %s - ?", field, field))
-			values = append(values, value)
+			m[field] = gorm.Expr(fmt.Sprintf("%s - ?", field), value)
 		}
-		return tx.UpdateColumns(gorm.Expr(strings.Join(expressions, ", "), values...))
+		return tx.UpdateColumns(m)
 	}
 }
 

+ 7 - 7
internal/service/endpoint.go

@@ -77,7 +77,7 @@ func Endpoint(
 			Opt:       dify_invocation.ENCRYPT_OPT_DECRYPT,
 			Namespace: dify_invocation.ENCRYPT_NAMESPACE_ENDPOINT,
 			Identity:  endpoint.ID,
-			Data:      endpoint.GetSettings(),
+			Data:      endpoint.Settings,
 			Config:    endpoint_declaration.Settings,
 		},
 	})
@@ -171,7 +171,7 @@ func EnableEndpoint(endpoint_id string, tenant_id string) *entities.Response {
 		return entities.NewErrorResponse(-500, "Failed to enable endpoint")
 	}
 
-	return entities.NewSuccessResponse("success")
+	return entities.NewSuccessResponse(true)
 }
 
 func DisableEndpoint(endpoint_id string, tenant_id string) *entities.Response {
@@ -189,7 +189,7 @@ func DisableEndpoint(endpoint_id string, tenant_id string) *entities.Response {
 		return entities.NewErrorResponse(-500, "Failed to disable endpoint")
 	}
 
-	return entities.NewSuccessResponse("success")
+	return entities.NewSuccessResponse(true)
 }
 
 func ListEndpoints(tenant_id string, page int, page_size int) *entities.Response {
@@ -243,7 +243,7 @@ func ListEndpoints(tenant_id string, page int, page_size int) *entities.Response
 				Opt:       dify_invocation.ENCRYPT_OPT_DECRYPT,
 				Namespace: dify_invocation.ENCRYPT_NAMESPACE_ENDPOINT,
 				Identity:  endpoint.ID,
-				Data:      endpoint.GetSettings(),
+				Data:      endpoint.Settings,
 				Config:    plugin_declaration.Endpoint.Settings,
 			},
 		})
@@ -251,7 +251,7 @@ func ListEndpoints(tenant_id string, page int, page_size int) *entities.Response
 			return entities.NewErrorResponse(-500, fmt.Sprintf("failed to decrypt settings: %v", err))
 		}
 
-		endpoint.SetSettings(decrypted_settings)
+		endpoint.Settings = decrypted_settings
 		endpoint.Declaration = plugin_declaration.Endpoint
 
 		endpoints[i] = endpoint
@@ -293,7 +293,7 @@ func ListPluginEndpoints(tenant_id string, plugin_unique_identifier plugin_entit
 				Opt:       dify_invocation.ENCRYPT_OPT_DECRYPT,
 				Namespace: dify_invocation.ENCRYPT_NAMESPACE_ENDPOINT,
 				Identity:  endpoint.ID,
-				Data:      endpoint.GetSettings(),
+				Data:      endpoint.Settings,
 				Config:    plugin_declaration.Endpoint.Settings,
 			},
 		})
@@ -301,7 +301,7 @@ func ListPluginEndpoints(tenant_id string, plugin_unique_identifier plugin_entit
 			return entities.NewErrorResponse(-500, fmt.Sprintf("failed to decrypt settings: %v", err))
 		}
 
-		endpoint.SetSettings(decrypted_settings)
+		endpoint.Settings = decrypted_settings
 		endpoint.Declaration = plugin_declaration.Endpoint
 
 		endpoints[i] = endpoint

+ 2 - 13
internal/service/install_service/state.go

@@ -1,7 +1,6 @@
 package install_service
 
 import (
-	"encoding/json"
 	"time"
 
 	"github.com/langgenius/dify-plugin-daemon/internal/db"
@@ -71,11 +70,6 @@ func InstallEndpoint(
 	name string,
 	settings map[string]any,
 ) (*models.Endpoint, error) {
-	settings_json, err := json.Marshal(settings)
-	if err != nil {
-		return nil, err
-	}
-
 	installation := &models.Endpoint{
 		HookID:    strings.RandomString(32),
 		PluginID:  plugin_id.PluginID(),
@@ -84,7 +78,7 @@ func InstallEndpoint(
 		Name:      name,
 		Enabled:   true,
 		ExpiredAt: time.Date(2050, 1, 1, 0, 0, 0, 0, time.UTC),
-		Settings:  string(settings_json),
+		Settings:  settings,
 	}
 
 	if err := db.WithTransaction(func(tx *gorm.DB) error {
@@ -195,13 +189,8 @@ func DisabledEndpoint(endpoint *models.Endpoint) error {
 }
 
 func UpdateEndpoint(endpoint *models.Endpoint, name string, settings map[string]any) error {
-	settings_json, err := json.Marshal(settings)
-	if err != nil {
-		return err
-	}
-
 	endpoint.Name = name
-	endpoint.Settings = string(settings_json)
+	endpoint.Settings = settings
 
 	return db.Update(endpoint)
 }

+ 4 - 4
internal/service/setup_endpoint.go

@@ -92,7 +92,7 @@ func SetupEndpoint(
 		return entities.NewErrorResponse(-500, fmt.Sprintf("failed to update endpoint: %v", err))
 	}
 
-	return entities.NewSuccessResponse(nil)
+	return entities.NewSuccessResponse(true)
 }
 
 func RemoveEndpoint(endpoint_id string, tenant_id string) *entities.Response {
@@ -130,7 +130,7 @@ func RemoveEndpoint(endpoint_id string, tenant_id string) *entities.Response {
 		return entities.NewErrorResponse(-500, fmt.Sprintf("failed to clear credentials cache: %v", err))
 	}
 
-	return entities.NewSuccessResponse(nil)
+	return entities.NewSuccessResponse(true)
 }
 
 func UpdateEndpoint(endpoint_id string, tenant_id string, user_id string, name string, settings map[string]any) *entities.Response {
@@ -186,7 +186,7 @@ func UpdateEndpoint(endpoint_id string, tenant_id string, user_id string, name s
 				Opt:       dify_invocation.ENCRYPT_OPT_DECRYPT,
 				Namespace: dify_invocation.ENCRYPT_NAMESPACE_ENDPOINT,
 				Identity:  installation.ID,
-				Data:      endpoint.GetSettings(),
+				Data:      endpoint.Settings,
 				Config:    plugin_declaration.Endpoint.Settings,
 			},
 		},
@@ -251,5 +251,5 @@ func UpdateEndpoint(endpoint_id string, tenant_id string, user_id string, name s
 		return entities.NewErrorResponse(-500, fmt.Sprintf("failed to clear credentials cache: %v", err))
 	}
 
-	return entities.NewSuccessResponse(nil)
+	return entities.NewSuccessResponse(true)
 }

+ 1 - 11
internal/types/models/endpoint.go

@@ -4,7 +4,6 @@ import (
 	"time"
 
 	"github.com/langgenius/dify-plugin-daemon/internal/types/entities/plugin_entities"
-	"github.com/langgenius/dify-plugin-daemon/internal/utils/parser"
 )
 
 // HookID is a pointer to plugin id and tenant id, using it to identify the endpoint plugin
@@ -17,15 +16,6 @@ type Endpoint struct {
 	PluginID    string                                       `json:"plugin_id" gorm:"index;size:64;column:plugin_id"`
 	ExpiredAt   time.Time                                    `json:"expired_at" gorm:"column:expired_at"`
 	Enabled     bool                                         `json:"enabled" gorm:"column:enabled"`
-	Settings    string                                       `json:"settings" gorm:"column:settings;size:2048"`
+	Settings    map[string]any                               `json:"settings" gorm:"column:settings;serializer:json"`
 	Declaration *plugin_entities.EndpointProviderDeclaration `json:"declaration" gorm:"-"` // not stored in db
 }
-
-func (e *Endpoint) GetSettings() map[string]any {
-	d, _ := parser.UnmarshalJson2Map(e.Settings)
-	return d
-}
-
-func (e *Endpoint) SetSettings(settings map[string]any) {
-	e.Settings = parser.MarshalJson(settings)
-}