Files
data-engine/service/sync/platform_manager.go
2026-05-29 18:39:32 +08:00

112 lines
2.9 KiB
Go

package sync
import (
"context"
"fmt"
dao "dataengine/dao/dict"
dto "dataengine/model/dto/dict"
entity "dataengine/model/entity/dict"
"github.com/sirupsen/logrus"
)
// PlatformConfig 运行时平台配置
type PlatformConfig struct {
*entity.DatasourcePlatform
AccessToken string
}
// GetApiUrl 拼接完整 API URL
func (c *PlatformConfig) GetApiUrl(apiPath string) string {
if c.ApiBaseUrl == "" {
return apiPath
}
return c.ApiBaseUrl + apiPath
}
// PlatformManager 平台配置管理器
type PlatformManager struct{}
// GetPlatform 根据平台编码获取配置
func (m *PlatformManager) GetPlatform(ctx context.Context, platformCode string) (*PlatformConfig, error) {
platform, err := dao.DatasourcePlatform.GetByPlatformCode(ctx, platformCode)
if err != nil {
return nil, fmt.Errorf("查询平台配置失败 [%s]: %w", platformCode, err)
}
if platform == nil {
return nil, fmt.Errorf("平台不存在 [%s]", platformCode)
}
if platform.Status != "ACTIVE" {
return nil, fmt.Errorf("平台 [%s] 未启用", platformCode)
}
cfg := &PlatformConfig{DatasourcePlatform: platform}
switch platform.AuthType {
case "TOKEN":
cfg.AccessToken = platform.Token
case "OAUTH2":
if platform.Token != "" {
cfg.AccessToken = platform.Token
}
case "API_KEY":
cfg.AccessToken = platform.ApiKey
default:
logrus.Warnf("平台 %s 认证类型 %s 未处理", platformCode, platform.AuthType)
}
return cfg, nil
}
// GetInterfaces 获取平台下的活跃接口列表
func (m *PlatformManager) GetInterfaces(ctx context.Context, platformId int64) ([]entity.ApiInterface, error) {
interfaces, _, err := dao.ApiInterface.List(ctx, &dto.ListApiInterfaceReq{
PlatformId: platformId,
Status: "active",
})
if err != nil {
return nil, err
}
return interfaces, nil
}
// GetInterfaceByCode 根据编码获取接口定义
func (m *PlatformManager) GetInterfaceByCode(ctx context.Context, platformId int64, code string) (*entity.ApiInterface, error) {
all, _, err := dao.ApiInterface.List(ctx, &dto.ListApiInterfaceReq{
PlatformId: platformId,
Code: code,
Status: "active",
})
if err != nil {
return nil, err
}
if len(all) == 0 {
return nil, fmt.Errorf("未找到接口 [code=%s]", code)
}
return &all[0], nil
}
// GetPlatformWithInterfaces 获取平台及所有接口
func (m *PlatformManager) GetPlatformWithInterfaces(ctx context.Context, platformCode string) (*PlatformConfig, []entity.ApiInterface, error) {
cfg, err := m.GetPlatform(ctx, platformCode)
if err != nil {
return nil, nil, err
}
interfaces, err := m.GetInterfaces(ctx, cfg.ID)
if err != nil {
return nil, nil, err
}
return cfg, interfaces, nil
}
// FindInterfaceUrl 在接口列表中查找指定编码的 URL
func FindInterfaceUrl(ifaces []entity.ApiInterface, code string) string {
for _, iface := range ifaces {
if iface.Code == code {
return iface.Url
}
}
return ""
}