mirror of
				https://github.com/openimsdk/open-im-server.git
				synced 2025-11-04 19:32:17 +08:00 
			
		
		
		
	fix: transfer group owner incr version more than 1.
This commit is contained in:
		
							parent
							
								
									6249445031
								
							
						
					
					
						commit
						0539a38310
					
				@ -400,10 +400,7 @@ func (g *groupDatabase) MapGroupMemberNum(ctx context.Context, groupIDs []string
 | 
			
		||||
 | 
			
		||||
func (g *groupDatabase) TransferGroupOwner(ctx context.Context, groupID string, oldOwnerUserID, newOwnerUserID string, roleLevel int32) error {
 | 
			
		||||
	return g.ctxTx.Transaction(ctx, func(ctx context.Context) error {
 | 
			
		||||
		if err := g.groupMemberDB.UpdateRoleLevel(ctx, groupID, oldOwnerUserID, roleLevel); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		if err := g.groupMemberDB.UpdateRoleLevel(ctx, groupID, newOwnerUserID, constant.GroupOwner); err != nil {
 | 
			
		||||
		if err := g.groupMemberDB.UpdateUserRoleLevels(ctx, groupID, oldOwnerUserID, roleLevel, newOwnerUserID, constant.GroupOwner); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		c := g.cache.CloneGroupCache()
 | 
			
		||||
 | 
			
		||||
@ -25,6 +25,7 @@ type GroupMember interface {
 | 
			
		||||
	Delete(ctx context.Context, groupID string, userIDs []string) (err error)
 | 
			
		||||
	Update(ctx context.Context, groupID string, userID string, data map[string]any) (err error)
 | 
			
		||||
	UpdateRoleLevel(ctx context.Context, groupID string, userID string, roleLevel int32) error
 | 
			
		||||
	UpdateUserRoleLevels(ctx context.Context, groupID string, firstUserID string, firstUserRoleLevel int32, secondUserID string, secondUserRoleLevel int32) error
 | 
			
		||||
	FindMemberUserID(ctx context.Context, groupID string) (userIDs []string, err error)
 | 
			
		||||
	Take(ctx context.Context, groupID string, userID string) (groupMember *model.GroupMember, err error)
 | 
			
		||||
	TakeOwner(ctx context.Context, groupID string) (groupMember *model.GroupMember, err error)
 | 
			
		||||
 | 
			
		||||
@ -115,11 +115,28 @@ func (g *GroupMemberMgo) Delete(ctx context.Context, groupID string, userIDs []s
 | 
			
		||||
 | 
			
		||||
func (g *GroupMemberMgo) UpdateRoleLevel(ctx context.Context, groupID string, userID string, roleLevel int32) error {
 | 
			
		||||
	return mongoutil.IncrVersion(func() error {
 | 
			
		||||
		return g.Update(ctx, groupID, userID, bson.M{"role_level": roleLevel})
 | 
			
		||||
		return mongoutil.UpdateOne(ctx, g.coll, bson.M{"group_id": groupID, "user_id": userID},
 | 
			
		||||
			bson.M{"$set": bson.M{"role_level": roleLevel}}, true)
 | 
			
		||||
	}, func() error {
 | 
			
		||||
		return g.member.IncrVersion(ctx, groupID, []string{userID}, model.VersionStateUpdate)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
func (g *GroupMemberMgo) UpdateUserRoleLevels(ctx context.Context, groupID string, firstUserID string, firstUserRoleLevel int32, secondUserID string, secondUserRoleLevel int32) error {
 | 
			
		||||
	return mongoutil.IncrVersion(func() error {
 | 
			
		||||
		if err := mongoutil.UpdateOne(ctx, g.coll, bson.M{"group_id": groupID, "user_id": firstUserID},
 | 
			
		||||
			bson.M{"$set": bson.M{"role_level": firstUserRoleLevel}}, true); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		if err := mongoutil.UpdateOne(ctx, g.coll, bson.M{"group_id": groupID, "user_id": secondUserID},
 | 
			
		||||
			bson.M{"$set": bson.M{"role_level": secondUserRoleLevel}}, true); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return nil
 | 
			
		||||
	}, func() error {
 | 
			
		||||
		return g.member.IncrVersion(ctx, groupID, []string{firstUserID, secondUserID}, model.VersionStateUpdate)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (g *GroupMemberMgo) Update(ctx context.Context, groupID string, userID string, data map[string]any) (err error) {
 | 
			
		||||
	if len(data) == 0 {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user