mirror of
				https://github.com/openimsdk/open-im-server.git
				synced 2025-10-26 21:22:16 +08:00 
			
		
		
		
	refactor: improve setConversations method. (#3194)
This commit is contained in:
		
							parent
							
								
									916d074cf9
								
							
						
					
					
						commit
						0b84a7c240
					
				| @ -270,109 +270,29 @@ func (c *conversationServer) SetConversations(ctx context.Context, req *pbconver | |||||||
| 	conversation.UserID = req.Conversation.UserID | 	conversation.UserID = req.Conversation.UserID | ||||||
| 	conversation.GroupID = req.Conversation.GroupID | 	conversation.GroupID = req.Conversation.GroupID | ||||||
| 
 | 
 | ||||||
| 	m := make(map[string]any) | 	m, conversation, err := UpdateConversationsMap(ctx, req) | ||||||
| 
 | 	if err != nil { | ||||||
| 	setConversationFieldsFunc := func() { | 		return nil, err | ||||||
| 		if req.Conversation.RecvMsgOpt != nil { |  | ||||||
| 			conversation.RecvMsgOpt = req.Conversation.RecvMsgOpt.Value |  | ||||||
| 			m["recv_msg_opt"] = req.Conversation.RecvMsgOpt.Value |  | ||||||
| 	} | 	} | ||||||
| 		if req.Conversation.AttachedInfo != nil { |  | ||||||
| 			conversation.AttachedInfo = req.Conversation.AttachedInfo.Value |  | ||||||
| 			m["attached_info"] = req.Conversation.AttachedInfo.Value |  | ||||||
| 		} |  | ||||||
| 		if req.Conversation.Ex != nil { |  | ||||||
| 			conversation.Ex = req.Conversation.Ex.Value |  | ||||||
| 			m["ex"] = req.Conversation.Ex.Value |  | ||||||
| 		} |  | ||||||
| 		if req.Conversation.IsPinned != nil { |  | ||||||
| 			conversation.IsPinned = req.Conversation.IsPinned.Value |  | ||||||
| 			m["is_pinned"] = req.Conversation.IsPinned.Value |  | ||||||
| 		} |  | ||||||
| 		if req.Conversation.GroupAtType != nil { |  | ||||||
| 			conversation.GroupAtType = req.Conversation.GroupAtType.Value |  | ||||||
| 			m["group_at_type"] = req.Conversation.GroupAtType.Value |  | ||||||
| 		} |  | ||||||
| 		if req.Conversation.MsgDestructTime != nil { |  | ||||||
| 			conversation.MsgDestructTime = req.Conversation.MsgDestructTime.Value |  | ||||||
| 			m["msg_destruct_time"] = req.Conversation.MsgDestructTime.Value |  | ||||||
| 		} |  | ||||||
| 		if req.Conversation.IsMsgDestruct != nil { |  | ||||||
| 			conversation.IsMsgDestruct = req.Conversation.IsMsgDestruct.Value |  | ||||||
| 			m["is_msg_destruct"] = req.Conversation.IsMsgDestruct.Value |  | ||||||
| 		} |  | ||||||
| 		if req.Conversation.BurnDuration != nil { |  | ||||||
| 			conversation.BurnDuration = req.Conversation.BurnDuration.Value |  | ||||||
| 			m["burn_duration"] = req.Conversation.BurnDuration.Value |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// set need set field in conversation |  | ||||||
| 	setConversationFieldsFunc() |  | ||||||
| 
 | 
 | ||||||
| 	for userID := range conversationMap { | 	for userID := range conversationMap { | ||||||
| 		unequal := len(m) | 		unequal := UserUpdateCheckMap(ctx, userID, req.Conversation, conversationMap[userID]) | ||||||
| 
 | 
 | ||||||
| 		if req.Conversation.RecvMsgOpt != nil { | 		if unequal { | ||||||
| 			if req.Conversation.RecvMsgOpt.Value == conversationMap[userID].RecvMsgOpt { |  | ||||||
| 				unequal-- |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		if req.Conversation.AttachedInfo != nil { |  | ||||||
| 			if req.Conversation.AttachedInfo.Value == conversationMap[userID].AttachedInfo { |  | ||||||
| 				unequal-- |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		if req.Conversation.Ex != nil { |  | ||||||
| 			if req.Conversation.Ex.Value == conversationMap[userID].Ex { |  | ||||||
| 				unequal-- |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		if req.Conversation.IsPinned != nil { |  | ||||||
| 			if req.Conversation.IsPinned.Value == conversationMap[userID].IsPinned { |  | ||||||
| 				unequal-- |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		if req.Conversation.GroupAtType != nil { |  | ||||||
| 			if req.Conversation.GroupAtType.Value == conversationMap[userID].GroupAtType { |  | ||||||
| 				unequal-- |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		if req.Conversation.MsgDestructTime != nil { |  | ||||||
| 			if req.Conversation.MsgDestructTime.Value == conversationMap[userID].MsgDestructTime { |  | ||||||
| 				unequal-- |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		if req.Conversation.IsMsgDestruct != nil { |  | ||||||
| 			if req.Conversation.IsMsgDestruct.Value == conversationMap[userID].IsMsgDestruct { |  | ||||||
| 				unequal-- |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		if req.Conversation.BurnDuration != nil { |  | ||||||
| 			if req.Conversation.BurnDuration.Value == conversationMap[userID].BurnDuration { |  | ||||||
| 				unequal-- |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		if unequal > 0 { |  | ||||||
| 			needUpdateUsersList = append(needUpdateUsersList, userID) | 			needUpdateUsersList = append(needUpdateUsersList, userID) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	if len(m) != 0 && len(needUpdateUsersList) != 0 { | 	if len(m) != 0 && len(needUpdateUsersList) != 0 { | ||||||
| 		if err := c.conversationDatabase.SetUsersConversationFieldTx(ctx, needUpdateUsersList, &conversation, m); err != nil { | 		if err := c.conversationDatabase.SetUsersConversationFieldTx(ctx, needUpdateUsersList, &conversation, m); err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		for _, v := range needUpdateUsersList { | 		for _, userID := range needUpdateUsersList { | ||||||
| 			c.conversationNotificationSender.ConversationChangeNotification(ctx, v, []string{req.Conversation.ConversationID}) | 			c.conversationNotificationSender.ConversationChangeNotification(ctx, userID, []string{req.Conversation.ConversationID}) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	if req.Conversation.IsPrivateChat != nil && req.Conversation.ConversationType != constant.ReadGroupChatType { | 	if req.Conversation.IsPrivateChat != nil && req.Conversation.ConversationType != constant.ReadGroupChatType { | ||||||
| 		var conversations []*dbModel.Conversation | 		var conversations []*dbModel.Conversation | ||||||
| 		for _, ownerUserID := range req.UserIDs { | 		for _, ownerUserID := range req.UserIDs { | ||||||
|  | |||||||
							
								
								
									
										85
									
								
								internal/rpc/conversation/db_map.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								internal/rpc/conversation/db_map.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,85 @@ | |||||||
|  | package conversation | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 
 | ||||||
|  | 	dbModel "github.com/openimsdk/open-im-server/v3/pkg/common/storage/model" | ||||||
|  | 	"github.com/openimsdk/protocol/conversation" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func UpdateConversationsMap(ctx context.Context, req *conversation.SetConversationsReq) (m map[string]any, conversation dbModel.Conversation, err error) { | ||||||
|  | 	m = make(map[string]any) | ||||||
|  | 
 | ||||||
|  | 	conversation.ConversationID = req.Conversation.ConversationID | ||||||
|  | 	conversation.ConversationType = req.Conversation.ConversationType | ||||||
|  | 	conversation.UserID = req.Conversation.UserID | ||||||
|  | 	conversation.GroupID = req.Conversation.GroupID | ||||||
|  | 
 | ||||||
|  | 	if req.Conversation.RecvMsgOpt != nil { | ||||||
|  | 		conversation.RecvMsgOpt = req.Conversation.RecvMsgOpt.Value | ||||||
|  | 		m["recv_msg_opt"] = req.Conversation.RecvMsgOpt.Value | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if req.Conversation.AttachedInfo != nil { | ||||||
|  | 		conversation.AttachedInfo = req.Conversation.AttachedInfo.Value | ||||||
|  | 		m["attached_info"] = req.Conversation.AttachedInfo.Value | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if req.Conversation.Ex != nil { | ||||||
|  | 		conversation.Ex = req.Conversation.Ex.Value | ||||||
|  | 		m["ex"] = req.Conversation.Ex.Value | ||||||
|  | 	} | ||||||
|  | 	if req.Conversation.IsPinned != nil { | ||||||
|  | 		conversation.IsPinned = req.Conversation.IsPinned.Value | ||||||
|  | 		m["is_pinned"] = req.Conversation.IsPinned.Value | ||||||
|  | 	} | ||||||
|  | 	if req.Conversation.GroupAtType != nil { | ||||||
|  | 		conversation.GroupAtType = req.Conversation.GroupAtType.Value | ||||||
|  | 		m["group_at_type"] = req.Conversation.GroupAtType.Value | ||||||
|  | 	} | ||||||
|  | 	if req.Conversation.MsgDestructTime != nil { | ||||||
|  | 		conversation.MsgDestructTime = req.Conversation.MsgDestructTime.Value | ||||||
|  | 		m["msg_destruct_time"] = req.Conversation.MsgDestructTime.Value | ||||||
|  | 	} | ||||||
|  | 	if req.Conversation.IsMsgDestruct != nil { | ||||||
|  | 		conversation.IsMsgDestruct = req.Conversation.IsMsgDestruct.Value | ||||||
|  | 		m["is_msg_destruct"] = req.Conversation.IsMsgDestruct.Value | ||||||
|  | 	} | ||||||
|  | 	if req.Conversation.BurnDuration != nil { | ||||||
|  | 		conversation.BurnDuration = req.Conversation.BurnDuration.Value | ||||||
|  | 		m["burn_duration"] = req.Conversation.BurnDuration.Value | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return m, conversation, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func UserUpdateCheckMap(ctx context.Context, userID string, req *conversation.ConversationReq, conversation *dbModel.Conversation) (unequal bool) { | ||||||
|  | 	unequal = false | ||||||
|  | 
 | ||||||
|  | 	if req.RecvMsgOpt != nil && conversation.RecvMsgOpt != req.RecvMsgOpt.Value { | ||||||
|  | 		unequal = true | ||||||
|  | 	} | ||||||
|  | 	if req.AttachedInfo != nil && conversation.AttachedInfo != req.AttachedInfo.Value { | ||||||
|  | 		unequal = true | ||||||
|  | 	} | ||||||
|  | 	if req.Ex != nil && conversation.Ex != req.Ex.Value { | ||||||
|  | 		unequal = true | ||||||
|  | 	} | ||||||
|  | 	if req.IsPinned != nil && conversation.IsPinned != req.IsPinned.Value { | ||||||
|  | 		unequal = true | ||||||
|  | 	} | ||||||
|  | 	if req.GroupAtType != nil && conversation.GroupAtType != req.GroupAtType.Value { | ||||||
|  | 		unequal = true | ||||||
|  | 	} | ||||||
|  | 	if req.MsgDestructTime != nil && conversation.MsgDestructTime != req.MsgDestructTime.Value { | ||||||
|  | 		unequal = true | ||||||
|  | 	} | ||||||
|  | 	if req.IsMsgDestruct != nil && conversation.IsMsgDestruct != req.IsMsgDestruct.Value { | ||||||
|  | 		unequal = true | ||||||
|  | 	} | ||||||
|  | 	if req.BurnDuration != nil && conversation.BurnDuration != req.BurnDuration.Value { | ||||||
|  | 		unequal = true | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return unequal | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user