public async Task PromoteToHeadOfHouseholdAsync(int userId)
        {
            VerifyCanHouseholdAction();

            var authId = GetClaimId(ClaimType.UserId);

            if (!HasPermission(Permission.EditParticipants))
            {
                _logger.LogError($"User {authId} doesn't have permission to promote family/group members to manager.");
                throw new GraException("Permission denied.");
            }

            var user = await _userRepository.GetByIdAsync(userId);;

            if (string.IsNullOrWhiteSpace(user.Username))
            {
                _logger.LogError($"User {userId} cannot be promoted to family/group manager without a username.");
                throw new GraException("User does not have a username.");
            }
            if (!user.HouseholdHeadUserId.HasValue)
            {
                _logger.LogError($"User {userId} cannot be promoted to family/group manager.");
                throw new GraException("User does not have a family/group or is already the manager.");
            }
            var headUser = await _userRepository.GetByIdAsync(user.HouseholdHeadUserId.Value);

            var household = await _userRepository.GetHouseholdAsync(user.HouseholdHeadUserId.Value);

            int oldHeadUserId = headUser.Id;

            user.HouseholdHeadUserId = null;
            await _userRepository.UpdateSaveAsync(authId, user);

            headUser.HouseholdHeadUserId = user.Id;
            await _userRepository.UpdateSaveAsync(authId, headUser);

            foreach (var member in household)
            {
                if (member.Id != user.Id)
                {
                    member.HouseholdHeadUserId = user.Id;
                    await _userRepository.UpdateAsync(authId, member);
                }
            }

            var groupInfo = await _groupInfoRepository.GetByUserIdAsync(oldHeadUserId);

            if (groupInfo != null)
            {
                await _groupInfoRepository.RemoveAsync(authId, groupInfo.Id);

                var newGroup = new GroupInfo
                {
                    GroupTypeId = groupInfo.GroupTypeId,
                    Name        = groupInfo.Name,
                    UserId      = userId
                };
                await _groupInfoRepository.AddAsync(authId, newGroup);
            }

            await _userRepository.SaveAsync();
        }