修改通话请求的状态字段
This commit is contained in:
@@ -7,12 +7,14 @@ import (
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-redis/redis/v8"
|
||||
"github.com/gorilla/websocket"
|
||||
"gorm.io/gorm"
|
||||
"xk-websocket/models"
|
||||
"xk-websocket/utils"
|
||||
)
|
||||
@@ -35,12 +37,14 @@ type WebSocketController struct {
|
||||
Port string
|
||||
RedisCtx context.Context
|
||||
Logger *log.Logger
|
||||
DB *gorm.DB // 数据库连接
|
||||
}
|
||||
|
||||
func NewWebSocketController() *WebSocketController {
|
||||
func NewWebSocketController(db *gorm.DB) *WebSocketController {
|
||||
return &WebSocketController{
|
||||
Clients: make(map[string]*websocket.Conn),
|
||||
RedisCtx: context.Background(),
|
||||
DB: db, // 初始化数据库连接
|
||||
}
|
||||
}
|
||||
|
||||
@@ -711,6 +715,7 @@ func (c *WebSocketController) BindHandler(ctx *gin.Context) {
|
||||
req.UserID, req.ClientID, time.Since(start))
|
||||
}
|
||||
|
||||
// SendToUserHandler 通过用户ID发送消息处理器(支持通话信令)
|
||||
// SendToUserHandler 通过用户ID发送消息处理器(支持通话信令)
|
||||
func (c *WebSocketController) SendToUserHandler(ctx *gin.Context) {
|
||||
start := time.Now()
|
||||
@@ -732,6 +737,24 @@ func (c *WebSocketController) SendToUserHandler(ctx *gin.Context) {
|
||||
log.Printf("📤📤📤📤📤📤📤📤 处理API用户发送请求: \n SenderUser=%s → ReceiverUser=%s \n MsgType=%d",
|
||||
payload.SenderUserID, payload.ReceiverUserID, payload.MessageType)
|
||||
|
||||
// 创建消息记录
|
||||
chatMsg := models.XkChatMessage{
|
||||
RoomId: payload.RoomId,
|
||||
SenderUserID: payload.SenderUserID,
|
||||
ReceiverUserID: payload.ReceiverUserID,
|
||||
MessageType: payload.MessageType,
|
||||
MessageContent: payload.MessageContent,
|
||||
CallID: payload.CallID,
|
||||
CallStatus: payload.CallStatus,
|
||||
}
|
||||
|
||||
// 保存到数据库
|
||||
if err := c.DB.Create(&chatMsg).Error; err != nil {
|
||||
log.Printf("❌ 保存消息到数据库失败: %v", err)
|
||||
} else {
|
||||
log.Printf("💾 消息保存到数据库成功: ID=%d", chatMsg.ID)
|
||||
}
|
||||
|
||||
// 创建基础消息结构
|
||||
clientMsg := models.ClientReceivedMessage{
|
||||
SenderID: "system",
|
||||
@@ -767,6 +790,86 @@ func (c *WebSocketController) SendToUserHandler(ctx *gin.Context) {
|
||||
log.Printf("✅ API用户发送请求完成: Duration=%s", time.Since(start))
|
||||
}
|
||||
|
||||
// 获取聊天记录(分页)
|
||||
func (c *WebSocketController) GetMessagesHandler(ctx *gin.Context) {
|
||||
// 解析查询参数
|
||||
roomId := ctx.Query("room_id")
|
||||
senderUserId := ctx.Query("sender_user_id")
|
||||
receiverUserId := ctx.Query("receiver_user_id")
|
||||
|
||||
page, _ := strconv.Atoi(ctx.DefaultQuery("page", "1"))
|
||||
pageSize, _ := strconv.Atoi(ctx.DefaultQuery("page_size", "15"))
|
||||
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
if pageSize < 1 || pageSize > 100 {
|
||||
pageSize = 15
|
||||
}
|
||||
|
||||
offset := (page - 1) * pageSize
|
||||
|
||||
// 构建查询
|
||||
query := c.DB.Model(&models.XkChatMessage{})
|
||||
if roomId != "" {
|
||||
query = query.Where("room_id = ?", roomId)
|
||||
}
|
||||
if senderUserId != "" {
|
||||
query = query.Where("sender_user_id = ?", senderUserId)
|
||||
}
|
||||
if receiverUserId != "" {
|
||||
query = query.Where("receiver_user_id = ?", receiverUserId)
|
||||
}
|
||||
|
||||
// 获取总数
|
||||
var total int64
|
||||
query.Count(&total)
|
||||
|
||||
// 获取分页数据
|
||||
var messages []models.XkChatMessage
|
||||
if err := query.Order("created_at DESC").Offset(offset).Limit(pageSize).Find(&messages).Error; err != nil {
|
||||
ctx.JSON(http.StatusInternalServerError, gin.H{"error": "获取消息失败"})
|
||||
return
|
||||
}
|
||||
|
||||
ctx.JSON(http.StatusOK, gin.H{
|
||||
"status": "success",
|
||||
"data": messages,
|
||||
"total": total,
|
||||
"page": page,
|
||||
"hasNext": total > int64(offset+pageSize),
|
||||
})
|
||||
}
|
||||
|
||||
// 同步聊天记录(全部)
|
||||
func (c *WebSocketController) SyncMessagesHandler(ctx *gin.Context) {
|
||||
roomId := ctx.Query("room_id")
|
||||
senderUserId := ctx.Query("sender_user_id")
|
||||
receiverUserId := ctx.Query("receiver_user_id")
|
||||
|
||||
query := c.DB.Model(&models.XkChatMessage{})
|
||||
if roomId != "" {
|
||||
query = query.Where("room_id = ?", roomId)
|
||||
}
|
||||
if senderUserId != "" {
|
||||
query = query.Where("sender_user_id = ?", senderUserId)
|
||||
}
|
||||
if receiverUserId != "" {
|
||||
query = query.Where("receiver_user_id = ?", receiverUserId)
|
||||
}
|
||||
|
||||
var messages []models.XkChatMessage
|
||||
if err := query.Order("created_at ASC").Find(&messages).Error; err != nil {
|
||||
ctx.JSON(http.StatusInternalServerError, gin.H{"error": "获取消息失败"})
|
||||
return
|
||||
}
|
||||
|
||||
ctx.JSON(http.StatusOK, gin.H{
|
||||
"status": "success",
|
||||
"data": messages,
|
||||
})
|
||||
}
|
||||
|
||||
// 添加客户端连接
|
||||
func (c *WebSocketController) addClient(clientID string, conn *websocket.Conn) {
|
||||
c.ClientsMux.Lock()
|
||||
|
||||
Reference in New Issue
Block a user