feat: add language support and tests for English and Chinese seed data

- 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.
This commit is contained in:
mlogclub
2026-06-01 12:03:57 +08:00
parent 6f86bdcd75
commit b743639731
21 changed files with 665 additions and 129 deletions
+58 -26
View File
@@ -1,6 +1,7 @@
package agentteam
import (
"agent-desk/cmd/testdata/seedlang"
"agent-desk/internal/models"
"agent-desk/internal/pkg/constants"
"agent-desk/internal/pkg/enums"
@@ -25,7 +26,7 @@ type InitResult struct {
// 2. 客服A 用户
// 3. 客服B 用户
// 4. 为客服A和客服B创建客服档案,关联到该客服组
func Init() (*InitResult, error) {
func Init(lang seedlang.Language) (*InitResult, error) {
result := &InitResult{}
// 获取管理员用户
@@ -39,7 +40,7 @@ func Init() (*InitResult, error) {
}
err := sqls.WithTransaction(func(ctx *sqls.TxContext) error {
return initTeamAndUsers(ctx, adminUser, result)
return initTeamAndUsers(ctx, adminUser, result, lang)
})
if err != nil {
return result, fmt.Errorf("init team and users failed: %w", err)
@@ -48,8 +49,8 @@ func Init() (*InitResult, error) {
return result, nil
}
func initTeamAndUsers(ctx *sqls.TxContext, leaderUser *models.User, result *InitResult) error {
teamName := "默认客服组"
func initTeamAndUsers(ctx *sqls.TxContext, leaderUser *models.User, result *InitResult, lang seedlang.Language) error {
teamName := localizedTeamName(lang)
now := time.Now()
team := repositories.AgentTeamRepository.Take(ctx.Tx, "name = ?", teamName)
@@ -83,28 +84,7 @@ func initTeamAndUsers(ctx *sqls.TxContext, leaderUser *models.User, result *Init
result.TeamCreated = true
}
agentUsers := []struct {
username string
nickname string
code string
}{
{
username: leaderUser.Username,
nickname: "客服组长",
code: "AGENT_LEADER_A",
},
{
username: "agent_a",
nickname: "客服A",
code: "AGENT_A",
},
{
username: "agent_b",
nickname: "客服B",
code: "AGENT_B",
},
}
agentUsers := localizedAgentUsers(lang, leaderUser.Username)
for _, agentUser := range agentUsers {
userID, userCreated, err := createOrGetUser(ctx, agentUser.username, agentUser.nickname)
if err != nil {
@@ -129,6 +109,58 @@ func initTeamAndUsers(ctx *sqls.TxContext, leaderUser *models.User, result *Init
return nil
}
type agentUserSeed struct {
username string
nickname string
code string
}
func localizedTeamName(lang seedlang.Language) string {
if lang == seedlang.English {
return "Default Support Team"
}
return "默认客服组"
}
func localizedAgentUsers(lang seedlang.Language, leaderUsername string) []agentUserSeed {
if lang == seedlang.English {
return []agentUserSeed{
{
username: leaderUsername,
nickname: "Support Lead",
code: "AGENT_LEADER_A",
},
{
username: "agent_a",
nickname: "Agent A",
code: "AGENT_A",
},
{
username: "agent_b",
nickname: "Agent B",
code: "AGENT_B",
},
}
}
return []agentUserSeed{
{
username: leaderUsername,
nickname: "客服组长",
code: "AGENT_LEADER_A",
},
{
username: "agent_a",
nickname: "客服A",
code: "AGENT_A",
},
{
username: "agent_b",
nickname: "客服B",
code: "AGENT_B",
},
}
}
func createOrGetUser(ctx *sqls.TxContext, username, nickname string) (int64, bool, error) {
user := repositories.UserRepository.Take(
ctx.Tx,