141 lines
3.9 KiB
Go
141 lines
3.9 KiB
Go
/*
|
|
* Copyright 2025 coze-dev Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package connector
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/coze-dev/coze-studio/backend/api/model/crossdomain/connector"
|
|
"github.com/coze-dev/coze-studio/backend/domain/connector/entity"
|
|
"github.com/coze-dev/coze-studio/backend/infra/contract/storage"
|
|
"github.com/coze-dev/coze-studio/backend/pkg/errorx"
|
|
"github.com/coze-dev/coze-studio/backend/pkg/i18n"
|
|
"github.com/coze-dev/coze-studio/backend/pkg/lang/conv"
|
|
"github.com/coze-dev/coze-studio/backend/types/consts"
|
|
"github.com/coze-dev/coze-studio/backend/types/errno"
|
|
)
|
|
|
|
type connectorImpl struct {
|
|
tos storage.Storage
|
|
}
|
|
|
|
func NewService(tos storage.Storage) Connector {
|
|
return &connectorImpl{
|
|
tos: tos,
|
|
}
|
|
}
|
|
|
|
var i18n2ConnectorDesc = map[i18n.Locale]map[int64]string{
|
|
i18n.LocaleEN: {
|
|
consts.WebSDKConnectorID: "Deploy your project to the Chat SDK. This publishing method is supported only for projects that have created a conversation flow, please refer to [Installation Guidelines](coze://web-sdk-guide) for installation methods.",
|
|
consts.APIConnectorID: "Supports OAuth 2.0 and personal access tokens",
|
|
consts.CozeConnectorID: "Coze",
|
|
},
|
|
}
|
|
|
|
func (c *connectorImpl) AllConnectorInfo(ctx context.Context) []*entity.Connector {
|
|
connectors := []*entity.Connector{
|
|
{
|
|
Connector: &connector.Connector{
|
|
ID: consts.WebSDKConnectorID,
|
|
Name: "Chat SDK",
|
|
URI: "default_icon/connector-chat-sdk.jpg",
|
|
Desc: "将项目部署到Chat SDK。仅创建过对话流的项目支持该发布方式,安装方式请查看[安装指引](coze://web-sdk-guide)",
|
|
},
|
|
},
|
|
{
|
|
Connector: &connector.Connector{
|
|
ID: consts.APIConnectorID,
|
|
Name: "API",
|
|
URI: "default_icon/connector-api.jpg",
|
|
Desc: "支持 OAuth 2.0 和个人访问令牌",
|
|
},
|
|
},
|
|
{
|
|
Connector: &connector.Connector{
|
|
ID: consts.CozeConnectorID,
|
|
Name: "coze",
|
|
URI: "default_icon/connector-coze.png",
|
|
Desc: "Coze",
|
|
},
|
|
},
|
|
}
|
|
|
|
locale := i18n.GetLocale(ctx)
|
|
for _, connector := range connectors {
|
|
i18nDesc, ok := i18n2ConnectorDesc[locale][connector.ID]
|
|
if ok {
|
|
connector.Desc = i18nDesc
|
|
}
|
|
}
|
|
|
|
return connectors
|
|
}
|
|
|
|
func (c *connectorImpl) List(ctx context.Context) ([]*entity.Connector, error) {
|
|
allConnectors := c.AllConnectorInfo(ctx)
|
|
res := make([]*entity.Connector, 0, len(allConnectors))
|
|
|
|
for _, connector := range allConnectors {
|
|
var err error
|
|
connector.URL, err = c.tos.GetObjectUrl(ctx, connector.URI)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
res = append(res, connector)
|
|
}
|
|
|
|
return res, nil
|
|
}
|
|
|
|
func (c *connectorImpl) GetByID(ctx context.Context, id int64) (*entity.Connector, error) {
|
|
res, err := c.GetByIDs(ctx, []int64{id})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
connector, ok := res[id]
|
|
if !ok {
|
|
return nil, errorx.New(errno.ErrConnectorNotFound, errorx.KV("id", conv.Int64ToStr(id)))
|
|
}
|
|
|
|
return connector, nil
|
|
}
|
|
|
|
func (c *connectorImpl) GetByIDs(ctx context.Context, ids []int64) (map[int64]*entity.Connector, error) {
|
|
connectorsMap := make(map[int64]*entity.Connector, len(ids))
|
|
allConnectors := c.AllConnectorInfo(ctx)
|
|
|
|
for _, connector := range allConnectors {
|
|
connectorsMap[connector.ID] = connector
|
|
}
|
|
|
|
cr := make(map[int64]*entity.Connector, len(ids))
|
|
for _, id := range ids {
|
|
if connector, ok := connectorsMap[id]; ok {
|
|
var err error
|
|
connector.URL, err = c.tos.GetObjectUrl(ctx, connector.URI)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
cr[id] = connector
|
|
}
|
|
}
|
|
return cr, nil
|
|
}
|