群聊接口
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"fmt"
|
||||
"log"
|
||||
"strconv"
|
||||
"strings"
|
||||
"xk-websocket-v2/internal/model"
|
||||
"xk-websocket-v2/internal/service"
|
||||
"xk-websocket-v2/internal/utils"
|
||||
@@ -351,6 +352,110 @@ func AddGroupMembersHandler(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 发送群通知和系统消息
|
||||
if service.ChatSvc != nil && service.UserSvc != nil {
|
||||
// 获取操作者信息
|
||||
operator, opErr := service.UserSvc.GetUserByID(userID.(string))
|
||||
if opErr == nil {
|
||||
// 获取被邀请成员信息
|
||||
invitedNames := make([]string, 0)
|
||||
for _, memberID := range req.MemberIDs {
|
||||
member, memErr := service.UserSvc.GetUserByID(memberID)
|
||||
if memErr == nil {
|
||||
invitedNames = append(invitedNames, member.Name)
|
||||
}
|
||||
}
|
||||
|
||||
if len(invitedNames) > 0 {
|
||||
// 获取群成员列表(包括新加入的成员)
|
||||
memberIDs, mErr := service.RoomSvc.GetRoomMembers(roomID)
|
||||
if mErr == nil {
|
||||
// 构建群通知消息内容
|
||||
var notifContent string
|
||||
if len(invitedNames) == 1 {
|
||||
notifContent = fmt.Sprintf("%s 邀请了 %s 加入群聊", operator.Name, invitedNames[0])
|
||||
} else {
|
||||
notifContent = fmt.Sprintf("%s 邀请了 %s 加入群聊", operator.Name, strings.Join(invitedNames, "、"))
|
||||
}
|
||||
|
||||
notifExtra := map[string]interface{}{
|
||||
"type": "member_invite",
|
||||
"room_id": roomID,
|
||||
"operator": userID.(string),
|
||||
"operator_name": operator.Name,
|
||||
"targets": req.MemberIDs,
|
||||
"target_names": invitedNames,
|
||||
}
|
||||
notifExtraJSON, _ := json.Marshal(notifExtra)
|
||||
|
||||
// 为所有成员发送群通知(包括新加入的成员)
|
||||
for _, uid := range memberIDs {
|
||||
// 群通知消息
|
||||
notifMsg := model.ChatMessage{
|
||||
RoomID: roomID,
|
||||
SenderUserID: userID.(string),
|
||||
ReceiverUserID: roomID,
|
||||
MessageType: model.MessageTypeGroupNotif,
|
||||
Content: notifContent,
|
||||
Extra: string(notifExtraJSON),
|
||||
}
|
||||
|
||||
if err := service.ChatSvc.DB.Create(¬ifMsg).Error; err == nil {
|
||||
// 更新会话
|
||||
if service.ConversationSvc != nil {
|
||||
_ = service.ConversationSvc.UpsertConversationOnMessage(uid, roomID, roomID, notifMsg, false)
|
||||
}
|
||||
|
||||
// 推送消息
|
||||
pushMsg := model.WsPayload{
|
||||
RequestType: "receive_message",
|
||||
Data: notifMsg,
|
||||
}
|
||||
msgBytes, _ := json.Marshal(pushMsg)
|
||||
service.ChatSvc.DispatchMessage(uid, msgBytes)
|
||||
}
|
||||
}
|
||||
|
||||
// 为新加入的成员发送系统消息
|
||||
for _, memberID := range req.MemberIDs {
|
||||
systemContent := fmt.Sprintf("你被 %s 邀请加入群聊", operator.Name)
|
||||
systemExtra := map[string]interface{}{
|
||||
"type": "member_invited",
|
||||
"room_id": roomID,
|
||||
"operator": userID.(string),
|
||||
"operator_name": operator.Name,
|
||||
}
|
||||
systemExtraJSON, _ := json.Marshal(systemExtra)
|
||||
|
||||
systemMsg := model.ChatMessage{
|
||||
RoomID: roomID,
|
||||
SenderUserID: userID.(string),
|
||||
ReceiverUserID: roomID,
|
||||
MessageType: model.MessageTypeSystem,
|
||||
Content: systemContent,
|
||||
Extra: string(systemExtraJSON),
|
||||
}
|
||||
|
||||
if err := service.ChatSvc.DB.Create(&systemMsg).Error; err == nil {
|
||||
// 更新会话
|
||||
if service.ConversationSvc != nil {
|
||||
_ = service.ConversationSvc.UpsertConversationOnMessage(memberID, roomID, roomID, systemMsg, false)
|
||||
}
|
||||
|
||||
// 推送消息
|
||||
pushMsg := model.WsPayload{
|
||||
RequestType: "receive_message",
|
||||
Data: systemMsg,
|
||||
}
|
||||
msgBytes, _ := json.Marshal(pushMsg)
|
||||
service.ChatSvc.DispatchMessage(memberID, msgBytes)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
utils.Success(c, "添加成员成功")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user