// Package models 定义知识库 .db 文件中的核心业务表。 package models import "time" // Entry 是知识库中的一条问答记录,存储于各知识库 .db 文件的 entries 表。 // // # 设计说明 // // Entry 不包含 user_id 字段——这是本架构与传统多用户方案的核心区别。 // 数据隔离通过"切换不同 .db 文件"实现(物理隔离),而非逻辑隔离。 // 这意味着: // - 每个知识库文件就是一个完全独立的数据源; // - 任何针对 Entry 的查询都自动限定在当前活跃的知识库内; // - 不存在因遗漏 WHERE user_id = ? 而导致跨库数据泄露的风险。 // // # 字段说明 // // Keyword 是搜索的主要匹配目标(经过 INDEX 加速), // Question 存放完整的问题文本(兼做二级匹配), // Answer 存放答案全文(供 AI 润色时作为原始素材)。 type Entry struct { ID uint `gorm:"primaryKey;autoIncrement" json:"id"` // Keyword 是精简的检索关键词,例如 "退款政策"、"浇水频率"。 // 添加了 GORM 索引(B-Tree),使 LIKE '%keyword%' 查询更快。 // size:255 对应 TEXT NOT NULL,防止存入过长字符串或空值。 Keyword string `gorm:"index;size:255;not null" json:"keyword"` // Question 是完整的问题描述,作为搜索的二级匹配字段。 // type:text 映射到 SQLite TEXT 类型,无长度限制。 Question string `gorm:"type:text;not null" json:"question"` // Answer 是对应答案全文,也是传给 AI 做"润色"的原始素材。 Answer string `gorm:"type:text;not null" json:"answer"` // Category 用于前端分类展示和颜色区分(例如 "浇水"、"病虫害")。 // default:'通用' 保证没填分类时有默认值,避免前端渲染空标签。 Category string `gorm:"size:100;default:'通用'" json:"category"` // GORM 约定字段:自动维护创建时间和最后更新时间。 // UpdatedAt 用于在搜索无结果时排序返回"最近更新"的热门问答。 CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } // TableName 显式指定表名为 "entries"(避免 GORM 默认复数化为 "entries" / "entris")。 func (Entry) TableName() string { return "entries" }