state.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package install_service
  2. import (
  3. "time"
  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/types/models/curd"
  8. "github.com/langgenius/dify-plugin-daemon/internal/utils/strings"
  9. )
  10. func InstallPlugin(
  11. tenant_id string,
  12. user_id string,
  13. runtime plugin_entities.PluginRuntimeInterface,
  14. ) (*models.Plugin, *models.PluginInstallation, error) {
  15. identity, err := runtime.Identity()
  16. if err != nil {
  17. return nil, nil, err
  18. }
  19. plugin, installation, err := curd.CreatePlugin(tenant_id, user_id, identity, runtime.Type())
  20. if err != nil {
  21. return nil, nil, err
  22. }
  23. return plugin, installation, nil
  24. }
  25. func UninstallPlugin(tenant_id string, installation_id string, runtime plugin_entities.PluginRuntimeInterface) error {
  26. identity, err := runtime.Identity()
  27. if err != nil {
  28. return err
  29. }
  30. // delete the plugin from db
  31. _, err = curd.DeletePlugin(tenant_id, identity, installation_id)
  32. if err != nil {
  33. return err
  34. }
  35. return nil
  36. }
  37. // setup a plugin to db,
  38. // returns the endpoint id
  39. func SetupEndpoint(plugin_id string, installation_id string, tenant_id string, user_id string) (string, error) {
  40. installation := &models.Endpoint{
  41. HookID: strings.RandomString(32),
  42. PluginID: plugin_id,
  43. TenantID: tenant_id,
  44. UserID: user_id,
  45. ExpiredAt: time.Now().Add(time.Hour * 24 * 365 * 10),
  46. PluginInstallationId: installation_id,
  47. }
  48. if err := db.Create(&installation); err != nil {
  49. return "", err
  50. }
  51. return installation.HookID, nil
  52. }
  53. func GetEndpoint(tenant_id string, plugin_id string, installation_id string) (*models.Endpoint, error) {
  54. endpoint, err := db.GetOne[models.Endpoint](
  55. db.Equal("tenant_id", tenant_id),
  56. db.Equal("plugin_id", plugin_id),
  57. db.Equal("plugin_installation_id", installation_id),
  58. )
  59. if err != nil {
  60. return nil, err
  61. }
  62. return &endpoint, nil
  63. }
  64. // uninstalls a plugin from db
  65. func UninstallEndpoint(endpoint *models.Endpoint) error {
  66. return db.Delete(endpoint)
  67. }