ソースを参照

enhance: support batch fetch plugin installations

Yeuoly 8 ヶ月 前
コミット
125d69fd12
共有2 個のファイルを変更した42 個の追加4 個の削除を含む
  1. 39 2
      internal/service/manage_plugin.go
  2. 3 2
      internal/types/entities/plugin_entities/identity.go

+ 39 - 2
internal/service/manage_plugin.go

@@ -1,6 +1,7 @@
 package service
 
 import (
+	"errors"
 	"time"
 
 	"github.com/langgenius/dify-plugin-daemon/internal/db"
@@ -83,8 +84,16 @@ func ListPlugins(tenant_id string, page int, page_size int) *entities.Response {
 
 // Using plugin_ids to fetch plugin installations
 func BatchFetchPluginInstallationByIDs(tenant_id string, plugin_ids []string) *entities.Response {
+	type installation struct {
+		models.PluginInstallation
+
+		Version     manifest_entities.Version          `json:"version"`
+		Checksum    string                             `json:"checksum"`
+		Declaration *plugin_entities.PluginDeclaration `json:"declaration"`
+	}
+
 	if len(plugin_ids) == 0 {
-		return entities.NewSuccessResponse([]models.PluginInstallation{})
+		return entities.NewSuccessResponse([]installation{})
 	}
 
 	pluginInstallations, err := db.GetAll[models.PluginInstallation](
@@ -97,7 +106,35 @@ func BatchFetchPluginInstallationByIDs(tenant_id string, plugin_ids []string) *e
 		return entities.NewErrorResponse(-500, err.Error())
 	}
 
-	return entities.NewSuccessResponse(pluginInstallations)
+	data := make([]installation, 0, len(pluginInstallations))
+
+	for _, plugin_installation := range pluginInstallations {
+		pluginUniqueIdentifier, err := plugin_entities.NewPluginUniqueIdentifier(
+			plugin_installation.PluginUniqueIdentifier,
+		)
+
+		if err != nil {
+			return entities.NewErrorResponse(-500, errors.Join(errors.New("invalid plugin unique identifier found"), err).Error())
+		}
+
+		pluginDeclaration, err := helper.CombinedGetPluginDeclaration(
+			pluginUniqueIdentifier,
+			tenant_id,
+			plugin_entities.PluginRuntimeType(plugin_installation.RuntimeType),
+		)
+		if err != nil {
+			return entities.NewErrorResponse(-500, errors.Join(errors.New("failed to get plugin declaration"), err).Error())
+		}
+
+		data = append(data, installation{
+			PluginInstallation: plugin_installation,
+			Version:            pluginUniqueIdentifier.Version(),
+			Checksum:           pluginUniqueIdentifier.Checksum(),
+			Declaration:        pluginDeclaration,
+		})
+	}
+
+	return entities.NewSuccessResponse(data)
 }
 
 // check which plugin is missing

+ 3 - 2
internal/types/entities/plugin_entities/identity.go

@@ -6,6 +6,7 @@ import (
 	"strings"
 
 	"github.com/go-playground/validator/v10"
+	"github.com/langgenius/dify-plugin-daemon/internal/types/entities/manifest_entities"
 	"github.com/langgenius/dify-plugin-daemon/internal/types/validators"
 )
 
@@ -38,13 +39,13 @@ func (p PluginUniqueIdentifier) PluginID() string {
 	return p.String()
 }
 
-func (p PluginUniqueIdentifier) Version() string {
+func (p PluginUniqueIdentifier) Version() manifest_entities.Version {
 	// extract version part from the string
 	split := strings.Split(p.String(), "@")
 	if len(split) == 2 {
 		split = strings.Split(split[0], ":")
 		if len(split) == 2 {
-			return split[1]
+			return manifest_entities.Version(split[1])
 		}
 	}
 	return ""