feat: 构建用户模块,实现用户对话历史持久化,完善接口文档 #96
@@ -122,6 +122,16 @@ func serveWS(c *gin.Context, sessionMgr session.Manager, orch orchestrator.Orche
|
|||||||
userID := claims.UserID
|
userID := claims.UserID
|
||||||
username := claims.Username
|
username := claims.Username
|
||||||
|
|
||||||
|
// --- conversation_id 处理(upgrade 前校验归属) ---
|
||||||
|
conversationID := c.Query("conversation_id")
|
||||||
|
if conversationID != "" {
|
||||||
|
sess, err := sessionMgr.Get(c.Request.Context(), conversationID)
|
||||||
|
if err != nil || sess.UserID != userID {
|
||||||
|
c.JSON(http.StatusUnauthorized, gin.H{"error": "SESSION_NOT_FOUND"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
|
conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log.Errorw("websocket upgrade failed", "error", err)
|
logger.Log.Errorw("websocket upgrade failed", "error", err)
|
||||||
@@ -129,11 +139,17 @@ func serveWS(c *gin.Context, sessionMgr session.Manager, orch orchestrator.Orche
|
|||||||
}
|
}
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
|
||||||
// 创建会话
|
// 创建或复用会话
|
||||||
sessionID, err := sessionMgr.Create(context.Background(), userID, models.DefaultConfig())
|
var sessionID string
|
||||||
if err != nil {
|
if conversationID != "" {
|
||||||
logger.Log.Errorw("create session failed", "error", err)
|
sessionID = conversationID
|
||||||
return
|
logger.Log.Infow("resuming conversation", "session", sessionID, "user_id", userID)
|
||||||
|
} else {
|
||||||
|
sessionID, err = sessionMgr.Create(context.Background(), userID, models.DefaultConfig())
|
||||||
|
if err != nil {
|
||||||
|
logger.Log.Errorw("create session failed", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
client := &Client{
|
client := &Client{
|
||||||
|
|||||||
Reference in New Issue
Block a user