102 lines
2.5 KiB
Go
102 lines
2.5 KiB
Go
package plugin
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
|
|
"github.com/qianfree/team-api/internal/dao"
|
|
do "github.com/qianfree/team-api/internal/model/do"
|
|
)
|
|
|
|
// GetPluginConfig 获取插件全局配置。
|
|
func GetPluginConfig(ctx context.Context, pluginName string) (g.Map, error) {
|
|
record, err := dao.SysPlugins.Ctx(ctx).
|
|
Where("name", pluginName).
|
|
Fields("config").
|
|
One()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if record == nil {
|
|
return g.Map{}, nil
|
|
}
|
|
|
|
var config g.Map
|
|
configStr := record["config"].String()
|
|
if configStr == "" || configStr == "{}" {
|
|
return g.Map{}, nil
|
|
}
|
|
if err := json.Unmarshal([]byte(configStr), &config); err != nil {
|
|
return nil, err
|
|
}
|
|
return config, nil
|
|
}
|
|
|
|
// GetPluginConfigForTenant 获取租户级插件配置(优先使用租户覆盖,否则使用全局配置)。
|
|
func GetPluginConfigForTenant(ctx context.Context, pluginName string, tenantID int64) (g.Map, error) {
|
|
record, err := dao.TntTenantPlugins.Ctx(ctx).
|
|
Where("tenant_id = ? AND plugin_name = ?", tenantID, pluginName).
|
|
Fields("config").
|
|
One()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if record != nil {
|
|
configStr := record["config"].String()
|
|
if configStr != "" && configStr != "{}" {
|
|
var config g.Map
|
|
if err := json.Unmarshal([]byte(configStr), &config); err != nil {
|
|
return nil, err
|
|
}
|
|
return config, nil
|
|
}
|
|
}
|
|
|
|
return GetPluginConfig(ctx, pluginName)
|
|
}
|
|
|
|
// UpdatePluginConfig 更新插件全局配置。
|
|
func UpdatePluginConfig(ctx context.Context, pluginName string, config g.Map) error {
|
|
configJSON, err := json.Marshal(config)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = dao.SysPlugins.Ctx(ctx).
|
|
Where("name", pluginName).
|
|
Data(do.SysPlugins{Config: string(configJSON)}).
|
|
Update()
|
|
return err
|
|
}
|
|
|
|
// UpdatePluginConfigForTenant 更新租户级插件配置。
|
|
func UpdatePluginConfigForTenant(ctx context.Context, pluginName string, tenantID int64, config g.Map) error {
|
|
configJSON, err := json.Marshal(config)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = dao.TntTenantPlugins.Ctx(ctx).
|
|
Data(do.TntTenantPlugins{
|
|
TenantId: tenantID,
|
|
PluginName: pluginName,
|
|
Config: string(configJSON),
|
|
}).
|
|
OnConflict("tenant_id,plugin_name").
|
|
Save()
|
|
return err
|
|
}
|
|
|
|
// GetConfigSchema 获取插件配置 schema(如果插件实现了 Configurable)。
|
|
func GetConfigSchema(pluginName string) []ConfigFieldDef {
|
|
entry := GetPlugin(pluginName)
|
|
if entry == nil {
|
|
return nil
|
|
}
|
|
if c, ok := entry.Plugin.(Configurable); ok {
|
|
return c.ConfigSchema()
|
|
}
|
|
return nil
|
|
}
|