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"` // 是否启用世界书 Variables datatypes.JSON `gorm:"type:jsonb;default:'{}'" json:"variables"` // 变量存储 ({{setvar::}}/{{getvar::}}) // 统计信息 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" }