feat: 更新数据库和后端服务

- 新增chat_sessions和chat_groups数据库表
- 更新skill_handler和model相关接口
- 修改main.go注册新路由

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-13 14:33:54 +08:00
parent e19a0ba673
commit e5ea4ff359
5 changed files with 310 additions and 49 deletions

View File

@@ -147,7 +147,7 @@ func main() {
}
// 3. 自动迁移表
if err := db.AutoMigrate(&model.DatabaseInfo{}, &model.SubTableInfo{}, &model.ModelInfo{}, &model.KnowledgeBase{}, &model.KnowledgeDocument{}, &model.User{}, &model.Role{}, &model.Tool{}, &model.MCP{}, &model.Skill{}, &model.Agent{}, &model.AgentSkill{}, &model.AgentKnowledgeBase{}, &model.AgentMemory{}, &model.AgentTeam{}, &model.AgentTask{}).Error; err != nil {
if err := db.AutoMigrate(&model.DatabaseInfo{}, &model.SubTableInfo{}, &model.ModelInfo{}, &model.KnowledgeBase{}, &model.KnowledgeDocument{}, &model.User{}, &model.Role{}, &model.Tool{}, &model.MCP{}, &model.Skill{}, &model.Agent{}, &model.AgentSkill{}, &model.AgentKnowledgeBase{}, &model.AgentMemory{}, &model.AgentTeam{}, &model.AgentTask{}, &model.ChatSession{}, &model.ChatMessage{}, &model.ChatGroup{}).Error; err != nil {
log.Printf("Warning: AutoMigrate error: %v", err)
}
@@ -255,6 +255,57 @@ func main() {
`)
log.Println("Skills table verified/created")
// 3.5 确保 chat_sessions 表存在
db.Exec(`
CREATE TABLE IF NOT EXISTS chat_sessions (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
agent_id VARCHAR(36),
title VARCHAR(255),
model_id VARCHAR(36),
status VARCHAR(20) DEFAULT 'active',
created_at DATETIME(3),
updated_at DATETIME(3),
INDEX idx_chat_sessions_user (user_id),
INDEX idx_chat_sessions_agent (agent_id),
INDEX idx_chat_sessions_updated (updated_at DESC)
)
`)
log.Println("Chat sessions table verified/created")
// 3.6 确保 chat_messages 表存在
db.Exec(`
CREATE TABLE IF NOT EXISTS chat_messages (
id VARCHAR(36) PRIMARY KEY,
session_id VARCHAR(36) NOT NULL,
role VARCHAR(20),
content TEXT,
tokens_used INT DEFAULT 0,
duration_ms INT DEFAULT 0,
metadata TEXT,
created_at DATETIME(3),
INDEX idx_chat_messages_session (session_id),
INDEX idx_chat_messages_created (created_at ASC)
)
`)
log.Println("Chat messages table verified/created")
// 3.7 确保 chat_groups 表存在
db.Exec(`
CREATE TABLE IF NOT EXISTS chat_groups (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
name VARCHAR(100) NOT NULL,
description TEXT,
agent_ids TEXT,
status VARCHAR(20) DEFAULT 'active',
created_at DATETIME(3),
updated_at DATETIME(3),
INDEX idx_chat_groups_user (user_id)
)
`)
log.Println("Chat groups table verified/created")
// 使用GORM Migrator添加缺失的列
migrator := db.Migrator()
@@ -300,6 +351,7 @@ func main() {
mcpRepo := repository.NewMCPRepository(db)
skillRepo := repository.NewSkillRepository(db)
agentRepo := repository.NewAgentRepository(db)
chatRepo := repository.NewChatRepository(db)
// 4.1 初始化默认管理员用户
initDefaultAdmin(userRepo)
@@ -348,6 +400,13 @@ func main() {
skillHandler := handler.NewSkillHandler(skillService)
agentHandler := handler.NewAgentHandler(agentService)
memoryHandler := handler.NewMemoryHandler(memoryService)
sessionHandler := handler.NewSessionHandler(chatRepo)
// 初始化群聊服务
chatGroupRepo := repository.NewChatGroupRepository(db)
chatGroupService := service.NewChatGroupService(chatGroupRepo, agentRepo)
chatGroupHandler := handler.NewChatGroupHandler(chatGroupService)
var uploadHandler *handler.UploadHandler
if uploadService != nil {
uploadHandler = handler.NewUploadHandler(uploadService, knowledgeRepo)
@@ -511,8 +570,8 @@ func main() {
{
skillGroup.GET("/list", skillHandler.List)
skillGroup.GET("/sync", skillHandler.Sync)
skillGroup.GET("/:id", skillHandler.GetByID)
skillGroup.GET("/content", skillHandler.GetSkillContent)
skillGroup.GET("/:id", skillHandler.GetByID)
skillGroup.POST("/add", skillHandler.Create)
skillGroup.PUT("/:id", skillHandler.Update)
skillGroup.DELETE("/:id", skillHandler.Delete)
@@ -531,12 +590,47 @@ func main() {
agentGroup.POST("/team/chat", agentHandler.TeamChat)
}
// 会话管理模块
chatGroup := r.Group("/api/chat")
{
chatGroup.POST("/sessions", sessionHandler.CreateSession)
chatGroup.GET("/sessions", sessionHandler.ListSessions)
chatGroup.GET("/sessions/:id", sessionHandler.GetSession)
chatGroup.PUT("/sessions/:id", sessionHandler.UpdateSession)
chatGroup.DELETE("/sessions/:id", sessionHandler.DeleteSession)
chatGroup.GET("/sessions/:id/messages", sessionHandler.GetMessages)
chatGroup.POST("/messages", sessionHandler.CreateMessage)
}
// 群聊管理模块
groupChat := r.Group("/api/chat/groups")
{
groupChat.POST("", chatGroupHandler.CreateGroup)
groupChat.GET("", chatGroupHandler.ListGroups)
groupChat.GET("/:id", chatGroupHandler.GetGroup)
groupChat.PUT("/:id", chatGroupHandler.UpdateGroup)
groupChat.DELETE("/:id", chatGroupHandler.DeleteGroup)
groupChat.POST("/:id/chat", chatGroupHandler.GroupChat)
}
// 记忆管理模块
memoryGroup := r.Group("/api/agent/:id/memories")
{
memoryGroup.GET("", memoryHandler.GetMemories)
memoryGroup.POST("", memoryHandler.CreateMemory)
memoryGroup.DELETE("/:memory_id", memoryHandler.DeleteMemory)
memoryGroup.GET("/search", memoryHandler.SearchMemories)
memoryGroup.GET("/categories", memoryHandler.GetMemoryCategories)
memoryGroup.GET("/tags", memoryHandler.GetMemoryTags)
memoryGroup.GET("/export", memoryHandler.ExportMemories)
memoryGroup.POST("/import", memoryHandler.ImportMemories)
}
// 单个记忆操作
memoryItemGroup := r.Group("/api/agent/memories/:memory_id")
{
memoryItemGroup.GET("", memoryHandler.GetMemory)
memoryItemGroup.PUT("", memoryHandler.UpdateMemory)
memoryItemGroup.DELETE("", memoryHandler.DeleteMemory)
}
// Swagger 文档