104 lines
4.3 KiB
Go
104 lines
4.3 KiB
Go
package models
|
|
|
|
import (
|
|
"gorm.io/gorm"
|
|
"time"
|
|
)
|
|
|
|
// KnowledgeBase 知识库模型
|
|
type KnowledgeBase struct {
|
|
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
|
TenantID uint `gorm:"not null;index;comment:租户 ID" json:"tenant_id"`
|
|
Name string `gorm:"size:200;not null;comment:知识库名称" json:"name"`
|
|
Slug string `gorm:"unique;size:100;not null;comment:知识库唯一标识" json:"slug"`
|
|
Description *string `gorm:"type:text;comment:知识库描述" json:"description"`
|
|
Icon *string `gorm:"size:100;comment:图标" json:"icon"`
|
|
SortOrder int `gorm:"default:0;comment:排序" json:"sort_order"`
|
|
Status string `gorm:"default:'draft';comment:状态 (draft/published/archived)" json:"status"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at"`
|
|
|
|
// 关联
|
|
Tenant *Tenant `gorm:"foreignKey:TenantID" json:"tenant,omitempty"`
|
|
KnowledgeItems []KnowledgeItem `gorm:"foreignKey:KnowledgeBaseID" json:"items,omitempty"`
|
|
}
|
|
|
|
// TableName 指定表名
|
|
func (KnowledgeBase) TableName() string {
|
|
return "knowledge_bases"
|
|
}
|
|
|
|
// KnowledgeItem 知识库条目模型
|
|
type KnowledgeItem struct {
|
|
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
|
TenantID uint `gorm:"not null;index;comment:租户 ID" json:"tenant_id"`
|
|
KnowledgeBaseID uint `gorm:"not null;index;comment:知识库 ID" json:"knowledge_base_id"`
|
|
Title string `gorm:"size:500;not null;comment:标题" json:"title"`
|
|
Slug string `gorm:"size:200;not null;comment:唯一标识" json:"slug"`
|
|
Content string `gorm:"type:longtext;not null;comment:内容 (Markdown)" json:"content"`
|
|
Summary *string `gorm:"type:text;comment:摘要" json:"summary"`
|
|
Tags *string `gorm:"type:json;comment:标签 (JSON)" json:"tags"`
|
|
Metadata *string `gorm:"type:text;comment:元数据 (JSON)" json:"metadata"`
|
|
AuthorID *uint `gorm:"comment:作者 ID" json:"author_id"`
|
|
Status string `gorm:"default:'draft';index;comment:状态 (draft/review/published/archived)" json:"status"`
|
|
Views int `gorm:"default:0;comment:浏览次数" json:"views"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at"`
|
|
|
|
// 关联
|
|
Tenant *Tenant `gorm:"foreignKey:TenantID" json:"tenant,omitempty"`
|
|
Author *User `gorm:"foreignKey:AuthorID" json:"author,omitempty"`
|
|
KnowledgeBase *KnowledgeBase `gorm:"foreignKey:KnowledgeBaseID" json:"knowledge_base,omitempty"`
|
|
}
|
|
|
|
// TableName 指定表名
|
|
func (KnowledgeItem) TableName() string {
|
|
return "knowledge_items"
|
|
}
|
|
|
|
// KnowledgeCategory 知识库分类
|
|
type KnowledgeCategory struct {
|
|
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
|
KnowledgeBaseID uint `gorm:"not null;index" json:"knowledge_base_id"`
|
|
ParentID *uint `gorm:"index" json:"parent_id"`
|
|
Name string `gorm:"size:200;not null" json:"name"`
|
|
Slug string `gorm:"size:100;not null" json:"slug"`
|
|
Description *string `gorm:"type:text" json:"description"`
|
|
Icon *string `gorm:"size:100" json:"icon"`
|
|
SortOrder int `gorm:"default:0" json:"sort_order"`
|
|
Status string `gorm:"default:'active'" json:"status"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at"`
|
|
}
|
|
|
|
// TableName 指定表名
|
|
func (KnowledgeCategory) TableName() string {
|
|
return "knowledge_categories"
|
|
}
|
|
|
|
// 知识库状态枚举
|
|
const (
|
|
KBStatusDraft = "draft"
|
|
KBStatusPublished = "published"
|
|
KBStatusArchived = "archived"
|
|
)
|
|
|
|
// 知识库条目状态枚举
|
|
const (
|
|
KnowledgeStatusDraft = "draft"
|
|
KnowledgeStatusReview = "review"
|
|
KnowledgeStatusPublished = "published"
|
|
KnowledgeStatusArchived = "archived"
|
|
)
|
|
|
|
// KnowledgeSearchResult 知识库搜索结果
|
|
type KnowledgeSearchResult struct {
|
|
Item KnowledgeItem `json:"item"`
|
|
Score float64 `json:"score"` // 相关度得分
|
|
Matched string `json:"matched"` // 匹配的文本片段
|
|
Category string `json:"category"` // 分类
|
|
}
|