Files
ai-agent/cmd/testdata/channel/init.go
T
mlogclub 101577f163 Refactor internal services to use agent-desk package structure
- Updated import paths in multiple service files to reflect the new agent-desk module.
- Added a new configuration file for agent-desk in the Docker setup.
2026-05-31 18:43:48 +08:00

99 lines
2.3 KiB
Go

package channel
import (
"agent-desk/internal/models"
"agent-desk/internal/pkg/dto"
"agent-desk/internal/pkg/enums"
"agent-desk/internal/repositories"
"fmt"
"time"
"github.com/mlogclub/simple/common/jsons"
"github.com/mlogclub/simple/common/strs"
"github.com/mlogclub/simple/sqls"
)
type InitResult struct {
Created int
Updated int
}
// Init 初始化 Channel 测试数据。
// 依赖于 AI Agent 已初始化。
func Init() (*InitResult, error) {
result := &InitResult{}
aiAgentID, err := getDefaultAIAgentID()
if err != nil {
return result, fmt.Errorf("get default ai agent id failed: %w", err)
}
if aiAgentID == 0 {
return result, fmt.Errorf("no default ai agent found, please init ai agent first")
}
seedItems := buildSeedItems(aiAgentID)
for _, item := range seedItems {
itemCopy := item
if err := sqls.WithTransaction(func(ctx *sqls.TxContext) error {
existing := repositories.ChannelRepository.Take(ctx.Tx, "name = ? AND channel_type = ?", itemCopy.Name, itemCopy.ChannelType)
if existing != nil {
if err := ctx.Tx.Model(existing).Updates(&itemCopy).Error; err != nil {
return err
}
result.Updated++
} else {
if err := ctx.Tx.Create(&itemCopy).Error; err != nil {
return err
}
result.Created++
}
return nil
}); err != nil {
return nil, fmt.Errorf("upsert channel failed: %w", err)
}
}
return result, nil
}
func buildSeedItems(aiAgentID int64) []models.Channel {
now := time.Now()
return []models.Channel{
{
Name: "官网客服",
ChannelType: enums.ChannelTypeWeb,
ChannelID: strs.UUID(),
AIAgentID: aiAgentID,
ConfigJSON: jsons.ToJsonStr(dto.WebChannelConfig{
Title: "在线客服",
Subtitle: "AgentDesk 提供技术支持",
ThemeColor: "#2563eb",
Position: "right",
Width: "780px",
}),
Status: enums.StatusOk,
Remark: "Local testdata seed",
AuditFields: models.AuditFields{
CreatedAt: now,
CreateUserID: 0,
CreateUserName: "System",
UpdatedAt: now,
UpdateUserID: 0,
UpdateUserName: "System",
},
},
}
}
func getDefaultAIAgentID() (int64, error) {
aiAgent := repositories.AIAgentRepository.Take(
sqls.DB(),
"status = ?",
enums.StatusOk,
)
if aiAgent == nil {
return 0, nil
}
return aiAgent.ID, nil
}