首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"io"
|
||||
"net/http"
|
||||
"resume-platform/internal/service/chat"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// ChatHandler 聊天对话处理器,基于文档向量库进行问答
|
||||
type ChatHandler struct {
|
||||
chatService chat.ChatService
|
||||
}
|
||||
|
||||
// NewChatHandler 创建聊天处理器实例
|
||||
// @param chatService 聊天服务层
|
||||
// @return *ChatHandler 处理器实例
|
||||
// @author sunct
|
||||
func NewChatHandler(chatService chat.ChatService) *ChatHandler {
|
||||
return &ChatHandler{chatService: chatService}
|
||||
}
|
||||
|
||||
// Chat 流式对话接口,以 SSE 方式返回 AI 回答
|
||||
// @param c Gin 上下文
|
||||
// @author sunct
|
||||
func (h *ChatHandler) Chat(c *gin.Context) {
|
||||
userID := c.Query("user_id")
|
||||
if userID == "" {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "user_id is required"})
|
||||
return
|
||||
}
|
||||
|
||||
var request struct {
|
||||
Question string `json:"question"`
|
||||
}
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request"})
|
||||
return
|
||||
}
|
||||
|
||||
c.Stream(func(w io.Writer) bool {
|
||||
answer, err := h.chatService.Chat(c.Request.Context(), userID, request.Question)
|
||||
if err != nil {
|
||||
c.SSEvent("error", gin.H{"message": err.Error()})
|
||||
return false
|
||||
}
|
||||
|
||||
c.SSEvent("message", answer)
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
// GetChatHistory 获取用户聊天历史记录接口
|
||||
// @param c Gin 上下文
|
||||
// @author sunct
|
||||
func (h *ChatHandler) GetChatHistory(c *gin.Context) {
|
||||
userID := c.Query("user_id")
|
||||
if userID == "" {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "user_id is required"})
|
||||
return
|
||||
}
|
||||
|
||||
history, err := h.chatService.GetChatHistory(c.Request.Context(), userID)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, history)
|
||||
}
|
||||
Reference in New Issue
Block a user