package handler import ( "net/http" "x-agents/server/internal/model" "x-agents/server/internal/service" "github.com/gin-gonic/gin" ) type ChatHandler struct { chatService *service.ChatService } func NewChatHandler(chatService *service.ChatService) *ChatHandler { return &ChatHandler{chatService: chatService} } // Chat 处理聊天请求 func (h *ChatHandler) Chat(c *gin.Context) { var req model.AgentRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } // 从上下文获取用户ID(由中间件设置) userID, exists := c.Get("user_id") if !exists { c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"}) return } resp, err := h.chatService.Chat(c.Request.Context(), userID.(string), req) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, resp) } // ListAgents 获取 Agent 列表 func (h *ChatHandler) ListAgents(c *gin.Context) { userID, exists := c.Get("user_id") if !exists { c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"}) return } agents, err := h.chatService.ListAgents(userID.(string)) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } if agents == nil { agents = []model.Agent{} } c.JSON(http.StatusOK, gin.H{"agents": agents}) } // CreateAgent 创建 Agent func (h *ChatHandler) CreateAgent(c *gin.Context) { userID, exists := c.Get("user_id") if !exists { c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"}) return } var req struct { Name string `json:"name" binding:"required"` Description string `json:"description"` } if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } agent, err := h.chatService.CreateAgent(userID.(string), req.Name, req.Description) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusCreated, agent) }