Files
st-react/server/model/app/conversation.go
2026-02-28 15:09:40 +08:00

59 lines
2.2 KiB
Go

package app
import (
"time"
"gorm.io/datatypes"
"gorm.io/gorm"
)
// Conversation 对话会话模型
type Conversation struct {
ID uint `gorm:"primarykey" json:"id"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
UserID uint `gorm:"index;not null" json:"userId"` // 所属用户ID
CharacterID uint `gorm:"index;not null" json:"characterId"` // 角色卡ID
Title string `gorm:"type:varchar(200)" json:"title"` // 对话标题
// 对话配置
PresetID *uint `gorm:"index" json:"presetId"` // 使用的预设ID
WorldbookID *uint `gorm:"index" json:"worldbookId"` // 使用的世界书ID
AIProvider string `gorm:"type:varchar(50)" json:"aiProvider"` // AI提供商 (openai/anthropic)
Model string `gorm:"type:varchar(100)" json:"model"` // 使用的模型
Settings datatypes.JSON `gorm:"type:jsonb" json:"settings"` // 对话设置 (temperature等)
WorldbookEnabled bool `gorm:"default:false" json:"worldbookEnabled"` // 是否启用世界书
// 统计信息
MessageCount int `gorm:"default:0" json:"messageCount"` // 消息数量
TokenCount int `gorm:"default:0" json:"tokenCount"` // Token使用量
}
// TableName 指定表名
func (Conversation) TableName() string {
return "conversations"
}
// Message 消息模型
type Message struct {
ID uint `gorm:"primarykey" json:"id"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
ConversationID uint `gorm:"index;not null" json:"conversationId"` // 所属对话ID
Role string `gorm:"type:varchar(20);not null" json:"role"` // 角色 (user/assistant/system)
Content string `gorm:"type:text;not null" json:"content"` // 消息内容
// 元数据
TokenCount int `gorm:"default:0" json:"tokenCount"` // Token数量
Metadata datatypes.JSON `gorm:"type:jsonb" json:"metadata"` // 额外元数据
}
// TableName 指定表名
func (Message) TableName() string {
return "messages"
}