coze-studio/backend/domain/memory/variables/entity/sys_variables.go

114 lines
3.0 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 entity
import (
"sort"
"strings"
"github.com/coze-dev/coze-studio/backend/api/model/data/variable/kvmemory"
"github.com/coze-dev/coze-studio/backend/api/model/data/variable/project_memory"
)
type SysConfVariables []*kvmemory.VariableInfo
func (v SysConfVariables) ToVariables() *VariablesMeta {
vars := make([]*VariableMeta, 0)
for _, vv := range v {
if vv == nil {
continue
}
tmp := &VariableMeta{
Keyword: vv.Key,
Description: vv.Description,
DefaultValue: vv.DefaultValue,
VariableType: project_memory.VariableType_KVVariable,
Channel: project_memory.VariableChannel_System,
IsReadOnly: true,
EffectiveChannelList: vv.EffectiveChannelList,
}
tmp.SetupSchema()
vars = append(vars, tmp)
}
return &VariablesMeta{
Variables: vars,
}
}
func (v SysConfVariables) GroupByName() []*kvmemory.GroupVariableInfo {
groups := make(map[string]*kvmemory.GroupVariableInfo)
for _, variable := range v {
if variable == nil {
continue
}
groupName := variable.GroupName
if groupName == "" {
groupName = "未分组" // Handling empty group names
}
if _, ok := groups[groupName]; !ok {
groups[groupName] = &kvmemory.GroupVariableInfo{
GroupName: groupName,
GroupDesc: variable.GroupDesc,
VarInfoList: []*kvmemory.VariableInfo{},
}
}
groups[groupName].VarInfoList = append(groups[groupName].VarInfoList, variable)
}
// Convert to slices and sort by group name
result := make([]*kvmemory.GroupVariableInfo, 0, len(groups))
for _, group := range groups {
result = append(result, group)
}
// Optional: sort by group name
sort.Slice(result, func(i, j int) bool {
return result[i].GroupName < result[j].GroupName
})
return result
}
func (v SysConfVariables) RemoveLocalChannelVariable() SysConfVariables {
var res []*kvmemory.VariableInfo
for _, vv := range v {
ch := v.genChannelFromName(vv.Key)
if ch == project_memory.VariableChannel_Location {
continue
}
res = append(res, vv)
}
return res
}
func (v SysConfVariables) genChannelFromName(name string) project_memory.VariableChannel {
if strings.Contains(name, "lark") {
return project_memory.VariableChannel_Feishu
} else if strings.Contains(name, "lon") || strings.Contains(name, "lat") {
return project_memory.VariableChannel_Location
}
return project_memory.VariableChannel_System
}