Sfoglia il codice sorgente

refactor: plugin installation

Yeuoly 10 mesi fa
parent
commit
856869cf6e

+ 2 - 2
internal/core/plugin_manager/remote_manager/register.go

@@ -3,11 +3,11 @@ package remote_manager
 import "github.com/langgenius/dify-plugin-daemon/internal/service/install_service"
 
 func (plugin *RemotePluginRuntime) Register() error {
-	installation_id, err := install_service.InstallPlugin(plugin.tenant_id, "", plugin, map[string]any{})
+	_, installation, err := install_service.InstallPlugin(plugin.tenant_id, "", plugin)
 	if err != nil {
 		return err
 	}
-	plugin.installation_id = installation_id
+	plugin.installation_id = installation.ID
 	return nil
 }
 

+ 9 - 42
internal/service/install_service/state.go

@@ -14,35 +14,18 @@ func InstallPlugin(
 	tenant_id string,
 	user_id string,
 	runtime plugin_entities.PluginRuntimeInterface,
-	configuration map[string]any,
-) (string, error) {
+) (*models.Plugin, *models.PluginInstallation, error) {
 	identity, err := runtime.Identity()
 	if err != nil {
-		return "", err
-	}
-
-	plugin := &models.Plugin{
-		PluginID:     identity,
-		Refers:       0,
-		Checksum:     runtime.Checksum(),
-		InstallType:  runtime.Type(),
-		ManifestType: runtime.Configuration().Type,
+		return nil, nil, err
 	}
 
-	plugin, installation, err := curd.CreatePlugin(tenant_id, user_id, plugin, configuration)
+	plugin, installation, err := curd.CreatePlugin(tenant_id, user_id, identity, runtime.Type())
 	if err != nil {
-		return "", err
+		return nil, nil, err
 	}
 
-	// check if there is a endpoint for the plugin
-	if runtime.Configuration().Resource.Permission.AllowRegistryEndpoint() {
-		_, err := InstallEndpoint(plugin.PluginID, installation.ID, tenant_id, user_id)
-		if err != nil {
-			return "", err
-		}
-	}
-
-	return installation.ID, nil
+	return plugin, installation, nil
 }
 
 func UninstallPlugin(tenant_id string, installation_id string, runtime plugin_entities.PluginRuntimeInterface) error {
@@ -52,35 +35,19 @@ func UninstallPlugin(tenant_id string, installation_id string, runtime plugin_en
 	}
 
 	// delete the plugin from db
-	resp, err := curd.DeletePlugin(tenant_id, identity, installation_id)
+	_, err = curd.DeletePlugin(tenant_id, identity, installation_id)
 	if err != nil {
 		return err
 	}
 
-	// delete the endpoint from db
-	if runtime.Configuration().Resource.Permission.AllowRegistryEndpoint() {
-		// get the endpoint from db
-		endpoint, err := GetEndpoint(tenant_id, identity, resp.Installation.ID)
-		if err != nil && err != db.ErrDatabaseNotFound {
-			return err
-		} else if err == db.ErrDatabaseNotFound {
-			return nil
-		}
-
-		err = UninstallEndpoint(endpoint)
-		if err != nil {
-			return err
-		}
-	}
-
 	return nil
 }
 
-// installs a plugin to db,
+// setup a plugin to db,
 // returns the endpoint id
-func InstallEndpoint(plugin_id string, installation_id string, tenant_id string, user_id string) (string, error) {
+func SetupEndpoint(plugin_id string, installation_id string, tenant_id string, user_id string) (string, error) {
 	installation := &models.Endpoint{
-		HookID:               strings.RandomString(64),
+		HookID:               strings.RandomString(32),
 		PluginID:             plugin_id,
 		TenantID:             tenant_id,
 		UserID:               user_id,

+ 10 - 6
internal/types/models/curd/atomic.go

@@ -4,15 +4,15 @@ import (
 	"errors"
 
 	"github.com/langgenius/dify-plugin-daemon/internal/db"
+	"github.com/langgenius/dify-plugin-daemon/internal/types/entities/plugin_entities"
 	"github.com/langgenius/dify-plugin-daemon/internal/types/models"
-	"github.com/langgenius/dify-plugin-daemon/internal/utils/parser"
 	"gorm.io/gorm"
 )
 
 // Create plugin for a tenant, create plugin if it has never been created before
 // and install it to the tenant, return the plugin and the installation
 // if the plugin has been created before, return the plugin which has been created before
-func CreatePlugin(tenant_id string, user_id string, plugin *models.Plugin, config map[string]any) (
+func CreatePlugin(tenant_id string, user_id string, plugin_identity string, install_type plugin_entities.PluginRuntimeType) (
 	*models.Plugin, *models.PluginInstallation, error,
 ) {
 	var plugin_to_be_returns *models.Plugin
@@ -21,13 +21,18 @@ func CreatePlugin(tenant_id string, user_id string, plugin *models.Plugin, confi
 	err := db.WithTransaction(func(tx *gorm.DB) error {
 		p, err := db.GetOne[models.Plugin](
 			db.WithTransactionContext(tx),
-			db.Equal("plugin_id", plugin.PluginID),
-			db.Equal("checksum", plugin.Checksum),
+			db.Equal("plugin_id", plugin_identity),
+			db.Equal("install_type", string(install_type)),
 			db.WLock(),
 		)
 
 		if err == db.ErrDatabaseNotFound {
-			plugin.Refers = 1
+			plugin := &models.Plugin{
+				PluginID:    plugin_identity,
+				InstallType: install_type,
+				Refers:      1,
+			}
+
 			err := db.Create(plugin, tx)
 			if err != nil {
 				return err
@@ -49,7 +54,6 @@ func CreatePlugin(tenant_id string, user_id string, plugin *models.Plugin, confi
 			PluginID: plugin_to_be_returns.PluginID,
 			TenantID: tenant_id,
 			UserID:   user_id,
-			Config:   parser.MarshalJson(config),
 		}
 
 		err = db.Create(installation, tx)

+ 0 - 1
internal/types/models/plugin.go

@@ -8,7 +8,6 @@ type Plugin struct {
 	Model
 	PluginID     string                            `json:"id" orm:"index;size:127"`
 	Refers       int                               `json:"refers" orm:"default:0"`
-	Checksum     string                            `json:"checksum" orm:"size:127"`
 	InstallType  plugin_entities.PluginRuntimeType `json:"install_type" orm:"size:127;index"`
 	ManifestType plugin_entities.DifyManifestType  `json:"manifest_type" orm:"size:127"`
 }