118 lines
3.5 KiB
Go
118 lines
3.5 KiB
Go
package main
|
|
|
|
import (
|
|
"github.com/XingfenD/yoresee_doc/internal/model"
|
|
"github.com/XingfenD/yoresee_doc/internal/utils"
|
|
"github.com/sirupsen/logrus"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func initializeKnowledgeBasesInTx(tx *gorm.DB) error {
|
|
logrus.Println("Initializing default knowledge bases in transaction...")
|
|
|
|
var adminUser model.User
|
|
if err := tx.Where("username = ?", "admin").First(&adminUser).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
var count int64
|
|
tx.Model(&model.KnowledgeBase{}).Where("name = ?", "默认知识库").Count(&count)
|
|
if count > 0 {
|
|
logrus.Println("Default knowledge base already exists in transaction.")
|
|
return nil
|
|
}
|
|
|
|
defaultKnowledgeBase := model.KnowledgeBase{
|
|
ExternalID: utils.GenerateExternalID(utils.ExternalIDKnowledgeBase),
|
|
Name: "默认知识库",
|
|
Description: "系统默认创建的知识库,用于存储常用文档和资料",
|
|
Cover: "",
|
|
CreatorUserID: adminUser.ID,
|
|
IsPublic: false,
|
|
}
|
|
|
|
if err := tx.Create(&defaultKnowledgeBase).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
exampleKnowledgeBase := model.KnowledgeBase{
|
|
ExternalID: utils.GenerateExternalID(utils.ExternalIDKnowledgeBase),
|
|
Name: "示例知识库",
|
|
Description: "示例知识库,展示知识库功能",
|
|
Cover: "",
|
|
CreatorUserID: adminUser.ID,
|
|
IsPublic: true,
|
|
}
|
|
|
|
if err := tx.Create(&exampleKnowledgeBase).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
logrus.Println("Adding documents to default knowledge base...")
|
|
|
|
rootDocumentTitles := []string{
|
|
"项目概述",
|
|
"系统架构",
|
|
"开发规范",
|
|
"API文档",
|
|
"数据库设计",
|
|
"前端开发",
|
|
"后端开发",
|
|
"测试计划",
|
|
"部署指南",
|
|
"安全规范",
|
|
"用户手册",
|
|
}
|
|
|
|
for _, title := range rootDocumentTitles {
|
|
rootDoc, err := createDocumentWithAllTables(tx, adminUser.ID, DocumentInput{
|
|
Title: title,
|
|
Content: "# " + title + "\n\n这是" + title + "的详细文档内容。",
|
|
Summary: title + "相关文档",
|
|
ParentID: 0,
|
|
Tags: []string{title},
|
|
KnowledgeID: &defaultKnowledgeBase.ID,
|
|
})
|
|
if err != nil {
|
|
logrus.Warnf("Failed to create root document %s: %v", title, err)
|
|
continue
|
|
}
|
|
|
|
for j := 1; j <= 3; j++ {
|
|
childTitle := title + " - 子文档" + string(rune('0'+j))
|
|
childDoc, err := createDocumentWithAllTables(tx, adminUser.ID, DocumentInput{
|
|
Title: childTitle,
|
|
Content: "# " + childTitle + "\n\n这是" + childTitle + "的详细文档内容。",
|
|
Summary: childTitle + "相关文档",
|
|
ParentID: rootDoc.ID,
|
|
Tags: []string{title, "子文档"},
|
|
KnowledgeID: &defaultKnowledgeBase.ID,
|
|
})
|
|
if err != nil {
|
|
logrus.Warnf("Failed to create child document %s: %v", childTitle, err)
|
|
continue
|
|
}
|
|
|
|
for k := 1; k <= 2; k++ {
|
|
grandchildTitle := childTitle + " - 孙文档" + string(rune('0'+k))
|
|
_, err := createDocumentWithAllTables(tx, adminUser.ID, DocumentInput{
|
|
Title: grandchildTitle,
|
|
Content: "# " + grandchildTitle + "\n\n这是" + grandchildTitle + "的详细文档内容。",
|
|
Summary: grandchildTitle + "相关文档",
|
|
ParentID: childDoc.ID,
|
|
Tags: []string{title, "子文档", "孙文档"},
|
|
KnowledgeID: &defaultKnowledgeBase.ID,
|
|
})
|
|
if err != nil {
|
|
logrus.Warnf("Failed to create grandchild document %s: %v", grandchildTitle, err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
logrus.Println("Documents added to default knowledge base successfully")
|
|
|
|
logrus.Println("Default knowledge bases created successfully in transaction")
|
|
return nil
|
|
}
|