redis.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. plugin_unique_identifier.String(),
  19. },
  20. ":",
  21. ),
  22. func() (*plugin_entities.PluginDeclaration, error) {
  23. if runtime_type != plugin_entities.PLUGIN_RUNTIME_TYPE_REMOTE {
  24. declaration, err := db.GetOne[models.PluginDeclaration](
  25. db.Equal("plugin_unique_identifier", plugin_unique_identifier.String()),
  26. )
  27. if err != nil && err != db.ErrDatabaseNotFound {
  28. return nil, err
  29. }
  30. if err != nil {
  31. return nil, err
  32. }
  33. return &declaration.Declaration, nil
  34. } else {
  35. // try to fetch the declaration from plugin if it's remote
  36. plugin, err := db.GetOne[models.Plugin](
  37. db.Equal("plugin_unique_identifier", plugin_unique_identifier.String()),
  38. db.Equal("install_type", string(plugin_entities.PLUGIN_RUNTIME_TYPE_REMOTE)),
  39. )
  40. if err != nil && err != db.ErrDatabaseNotFound {
  41. return nil, err
  42. }
  43. if err != nil {
  44. return nil, err
  45. }
  46. return &plugin.Declaration, nil
  47. }
  48. },
  49. )
  50. }