mirror of
				https://github.com/openimsdk/open-im-server.git
				synced 2025-11-04 19:32:17 +08:00 
			
		
		
		
	Merge branch 'main' of github.com:openimsdk/open-im-server into refactor/parse-token
This commit is contained in:
		
						commit
						7cea3172d5
					
				@ -152,42 +152,55 @@ func (f *friendDatabase) BecomeFriends(ctx context.Context, ownerUserID string,
 | 
				
			|||||||
	return f.tx.Transaction(ctx, func(ctx context.Context) error {
 | 
						return f.tx.Transaction(ctx, func(ctx context.Context) error {
 | 
				
			||||||
		cache := f.cache.CloneFriendCache()
 | 
							cache := f.cache.CloneFriendCache()
 | 
				
			||||||
		// user find friends
 | 
							// user find friends
 | 
				
			||||||
		fs1, err := f.friend.FindFriends(ctx, ownerUserID, friendUserIDs)
 | 
							myFriends, err := f.friend.FindFriends(ctx, ownerUserID, friendUserIDs)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							addOwners, err := f.friend.FindReversalFriends(ctx, ownerUserID, friendUserIDs)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		opUserID := mcontext.GetOperationID(ctx)
 | 
							opUserID := mcontext.GetOperationID(ctx)
 | 
				
			||||||
		for _, v := range friendUserIDs {
 | 
							friends := make([]*model.Friend, 0, len(friendUserIDs)*2)
 | 
				
			||||||
			fs1 = append(fs1, &model.Friend{OwnerUserID: ownerUserID, FriendUserID: v, AddSource: addSource, OperatorUserID: opUserID})
 | 
							myFriendsSet := datautil.SliceSetAny(myFriends, func(friend *model.Friend) string {
 | 
				
			||||||
		}
 | 
								return friend.FriendUserID
 | 
				
			||||||
		fs11 := datautil.DistinctAny(fs1, func(e *model.Friend) string {
 | 
					 | 
				
			||||||
			return e.FriendUserID
 | 
					 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
							addOwnersSet := datautil.SliceSetAny(addOwners, func(friend *model.Friend) string {
 | 
				
			||||||
		err = f.friend.Create(ctx, fs11)
 | 
								return friend.OwnerUserID
 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return err
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		fs2, err := f.friend.FindReversalFriends(ctx, ownerUserID, friendUserIDs)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return err
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		var newFriendIDs []string
 | 
					 | 
				
			||||||
		for _, v := range friendUserIDs {
 | 
					 | 
				
			||||||
			fs2 = append(fs2, &model.Friend{OwnerUserID: v, FriendUserID: ownerUserID, AddSource: addSource, OperatorUserID: opUserID})
 | 
					 | 
				
			||||||
			newFriendIDs = append(newFriendIDs, v)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		fs22 := datautil.DistinctAny(fs2, func(e *model.Friend) string {
 | 
					 | 
				
			||||||
			return e.OwnerUserID
 | 
					 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		err = f.friend.Create(ctx, fs22)
 | 
							newMyFriendIDs := make([]string, 0, len(friendUserIDs))
 | 
				
			||||||
 | 
							newMyOwnerIDs := make([]string, 0, len(friendUserIDs))
 | 
				
			||||||
 | 
							for _, userID := range friendUserIDs {
 | 
				
			||||||
 | 
								if ownerUserID == userID {
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if _, ok := myFriendsSet[userID]; !ok {
 | 
				
			||||||
 | 
									myFriendsSet[userID] = struct{}{}
 | 
				
			||||||
 | 
									newMyFriendIDs = append(newMyFriendIDs, userID)
 | 
				
			||||||
 | 
									friends = append(friends, &model.Friend{OwnerUserID: ownerUserID, FriendUserID: userID, AddSource: addSource, OperatorUserID: opUserID})
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if _, ok := addOwnersSet[userID]; !ok {
 | 
				
			||||||
 | 
									addOwnersSet[userID] = struct{}{}
 | 
				
			||||||
 | 
									newMyOwnerIDs = append(newMyOwnerIDs, userID)
 | 
				
			||||||
 | 
									friends = append(friends, &model.Friend{OwnerUserID: userID, FriendUserID: ownerUserID, AddSource: addSource, OperatorUserID: opUserID})
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if len(friends) == 0 {
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							err = f.friend.Create(ctx, friends)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		newFriendIDs = append(newFriendIDs, ownerUserID)
 | 
							if len(newMyFriendIDs) > 0 {
 | 
				
			||||||
		cache = cache.DelFriendIDs(newFriendIDs...).DelMaxFriendVersion(newFriendIDs...)
 | 
								cache = cache.DelFriendIDs(newMyFriendIDs...)
 | 
				
			||||||
 | 
								cache = cache.DelFriends(ownerUserID, newMyFriendIDs).DelMaxFriendVersion(newMyFriendIDs...)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if len(newMyOwnerIDs) > 0 {
 | 
				
			||||||
 | 
								cache = cache.DelFriendIDs(newMyOwnerIDs...)
 | 
				
			||||||
 | 
								cache = cache.DelOwner(ownerUserID, newMyOwnerIDs).DelMaxFriendVersion(newMyOwnerIDs...)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		return cache.ChainExecDel(ctx)
 | 
							return cache.ChainExecDel(ctx)
 | 
				
			||||||
 | 
					 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user