b743639731
- Introduced a new package `seedlang` to handle language parsing and constants for English and Chinese. - Updated `Init` functions across various modules (kb, quickreply, skill, tag) to accept a language parameter. - Implemented English seed data for FAQs, quick replies, skills, and tags, ensuring no Chinese text is present in English data. - Added tests to verify that English seed data does not contain Chinese characters. - Removed outdated README file from the kb test data directory. - Created new test files for channel and kb to validate the absence of Chinese text in English seed data.
127 lines
3.0 KiB
Go
127 lines
3.0 KiB
Go
package channel
|
|
|
|
import (
|
|
"agent-desk/cmd/testdata/seedlang"
|
|
"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(lang seedlang.Language) (*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(lang, 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(lang seedlang.Language, aiAgentID int64) []models.Channel {
|
|
now := time.Now()
|
|
if lang == seedlang.English {
|
|
return []models.Channel{
|
|
{
|
|
Name: "Website Support",
|
|
ChannelType: enums.ChannelTypeWeb,
|
|
ChannelID: strs.UUID(),
|
|
AIAgentID: aiAgentID,
|
|
ConfigJSON: jsons.ToJsonStr(dto.WebChannelConfig{
|
|
Title: "Online Support",
|
|
Subtitle: "Powered by 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",
|
|
},
|
|
},
|
|
}
|
|
}
|
|
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
|
|
}
|