From 50dcd65edf4765b480f39d664face650c031048b Mon Sep 17 00:00:00 2001 From: weijuesen Date: Wed, 12 Aug 2026 10:46:46 +0800 Subject: [PATCH] =?UTF-8?q?test(knowledge):=20seed=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=AE=8C=E6=95=B4=E6=80=A7=E6=B5=8B=E8=AF=95=EF=BC=88RED?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server-go/internal/model/knowledge.go | 44 +++++++++++++++++ .../internal/model/knowledge_seed_test.go | 49 +++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 server-go/internal/model/knowledge.go create mode 100644 server-go/internal/model/knowledge_seed_test.go diff --git a/server-go/internal/model/knowledge.go b/server-go/internal/model/knowledge.go new file mode 100644 index 0000000..7dd259c --- /dev/null +++ b/server-go/internal/model/knowledge.go @@ -0,0 +1,44 @@ +package model + +import "time" + +// Disease 蚕病百科条目(知识库-蚕病百科) +type Disease struct { + ID string `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id"` + Name string `gorm:"size:64" json:"name"` + Category string `gorm:"size:32;index" json:"category"` // viral/fungal/bacterial/protozoan/other + Pathogen string `gorm:"type:text" json:"pathogen"` + Transmission string `gorm:"type:text" json:"transmission"` + Medium string `gorm:"type:text" json:"medium"` + Incubation string `gorm:"type:text" json:"incubation"` + Symptoms string `gorm:"type:text" json:"symptoms"` + HighRiskStage string `gorm:"column:high_risk_stage;type:text" json:"highRiskStage"` + HighRiskCondition string `gorm:"column:high_risk_condition;type:text" json:"highRiskCondition"` + LethalTime string `gorm:"column:lethal_time;type:text" json:"lethalTime"` + SpreadTrend string `gorm:"column:spread_trend;type:text" json:"spreadTrend"` + Recurrence string `gorm:"type:text" json:"recurrence"` + Detection string `gorm:"type:text" json:"detection"` + Prevention string `gorm:"type:text" json:"prevention"` + ImageURL *string `gorm:"column:image_url;size:512" json:"imageUrl,omitempty"` + SortOrder int `gorm:"column:sort_order;type:int;default:0" json:"sortOrder"` + Enabled bool `gorm:"default:true" json:"enabled"` + CreatedAt time.Time `gorm:"type:timestamptz" json:"createdAt"` + UpdatedAt time.Time `gorm:"type:timestamptz" json:"updatedAt"` +} + +func (Disease) TableName() string { return "diseases" } + +// KnowledgeArticle 知识文章(AI 结果解读、LAMP/SERS 教程、季节性防控提醒等) +type KnowledgeArticle struct { + ID string `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id"` + Kind string `gorm:"size:32;index" json:"kind"` // ai_guide/lamp_guide/sers_guide/seasonal_tip + Title string `gorm:"size:128" json:"title"` + Summary string `gorm:"type:text" json:"summary"` + Content string `gorm:"type:text" json:"content"` + SortOrder int `gorm:"column:sort_order;type:int;default:0" json:"sortOrder"` + Enabled bool `gorm:"default:true" json:"enabled"` + CreatedAt time.Time `gorm:"type:timestamptz" json:"createdAt"` + UpdatedAt time.Time `gorm:"type:timestamptz" json:"updatedAt"` +} + +func (KnowledgeArticle) TableName() string { return "knowledge_articles" } diff --git a/server-go/internal/model/knowledge_seed_test.go b/server-go/internal/model/knowledge_seed_test.go new file mode 100644 index 0000000..669db7f --- /dev/null +++ b/server-go/internal/model/knowledge_seed_test.go @@ -0,0 +1,49 @@ +package model + +import "testing" + +func TestSeedDiseasesCoverCoreFour(t *testing.T) { + core := []string{"核型多角体病", "白僵病", "软化病", "微粒子病"} + got := map[string]bool{} + for _, d := range SeedDiseases { + got[d.Name] = true + } + for _, name := range core { + if !got[name] { + t.Errorf("核心蚕病缺失: %s", name) + } + } +} + +func TestSeedDiseasesRequiredFields(t *testing.T) { + for _, d := range SeedDiseases { + if d.Name == "" || d.Category == "" { + t.Errorf("病种名称/类别不能为空: %+v", d) + } + if d.Pathogen == "" || d.Symptoms == "" || d.Transmission == "" || d.Prevention == "" { + t.Errorf("病种必备字段缺失(病原/症状/传播途径/防治指南): %s", d.Name) + } + } +} + +func TestSeedDiseasesNamesUnique(t *testing.T) { + seen := map[string]bool{} + for _, d := range SeedDiseases { + if seen[d.Name] { + t.Errorf("病种名称重复: %s", d.Name) + } + seen[d.Name] = true + } +} + +func TestSeedKnowledgeArticlesHasAIGuide(t *testing.T) { + found := false + for _, a := range SeedKnowledgeArticles { + if a.Kind == "ai_guide" && a.Title != "" && a.Content != "" { + found = true + } + } + if !found { + t.Error("缺少 AI 结果解读文章(kind=ai_guide)") + } +}