redis.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package helper
  2. import (
  3. "strings"
  4. "github.com/langgenius/dify-plugin-daemon/internal/db"
  5. "github.com/langgenius/dify-plugin-daemon/internal/types/entities/plugin_entities"
  6. "github.com/langgenius/dify-plugin-daemon/internal/types/models"
  7. "github.com/langgenius/dify-plugin-daemon/internal/utils/cache"
  8. )
  9. func CombinedGetPluginDeclaration(
  10. plugin_unique_identifier plugin_entities.PluginUniqueIdentifier,
  11. tenant_id string,
  12. runtime_type plugin_entities.PluginRuntimeType,
  13. ) (*plugin_entities.PluginDeclaration, error) {
  14. return cache.AutoGetWithGetter(
  15. strings.Join(
  16. []string{
  17. string(runtime_type),
  18. tenant_id,
  19. plugin_unique_identifier.String(),
  20. },
  21. ":",
  22. ),
  23. func() (*plugin_entities.PluginDeclaration, error) {
  24. if runtime_type != plugin_entities.PLUGIN_RUNTIME_TYPE_REMOTE {
  25. declaration, err := db.GetOne[models.PluginDeclaration](
  26. db.Equal("plugin_unique_identifier", plugin_unique_identifier.String()),
  27. )
  28. if err != nil && err != db.ErrDatabaseNotFound {
  29. return nil, err
  30. }
  31. if err != nil {
  32. return nil, err
  33. }
  34. return &declaration.Declaration, nil
  35. } else {
  36. // try to fetch the declaration from plugin if it's remote
  37. plugin, err := db.GetOne[models.Plugin](
  38. db.Equal("unique_identifier", plugin_unique_identifier.String()),
  39. db.Equal("install_type", string(plugin_entities.PLUGIN_RUNTIME_TYPE_REMOTE)),
  40. db.Equal("tenant_id", tenant_id),
  41. )
  42. if err != nil && err != db.ErrDatabaseNotFound {
  43. return nil, err
  44. }
  45. if err != nil {
  46. return nil, err
  47. }
  48. return &plugin.Declaration, nil
  49. }
  50. },
  51. )
  52. }