public/project/addprojectuser.ps1

Set-MyInvokeCommandAlias -Alias "updateProjectV2Collaborators" -Command 'Invoke-UpdateProjectV2Collaborators -ProjectId {projectid} -collaborators "{collaboratorsIds}" -Role "{role}"'

function Add-ProjectUser {
    [CmdletBinding()]
        param(
        [Parameter()][string]$Owner,
        [Parameter()][int]$ProjectNumber,
        [Parameter(Mandatory,ValueFromPipeline)][string]$Handle,
        [Parameter()][string]$Role ="WRITER"

    )

    begin{

        ($Owner, $ProjectNumber) = Get-OwnerAndProjectNumber -Owner $Owner -ProjectNumber $ProjectNumber
        if ([string]::IsNullOrWhiteSpace($owner) -or [string]::IsNullOrWhiteSpace($ProjectNumber)) {
            throw "Owner and ProjectNumber are required on Get-Project"
        }
        
        $project = Get-Project -Owner $Owner -ProjectNumber $ProjectNumber -SkipItems
        
        $projectId = $project.ProjectId

        $userIds = @()

    }

    process{
        
        $user = Get-User -Handle $Handle
        $userId = $user.Id

        if([string]::IsNullOrWhiteSpace($userId)){
            Write-Error "No user found for handle [$Handle]"
        }

        $userIds += $userId
    }

    end{

        $userIdsString = $userIds -join " "

        if([string]::IsNullOrWhiteSpace($userIdsString)){
            Write-Error "No users found"
            return $false
        }

        $response = Invoke-MyCommand -Command "updateProjectV2Collaborators" -Parameters @{
            projectid = $projectId
            role = $Role
            collaboratorsIds = $userIdsString
        }

        # Check reply data to confirm users were added
        if($response.data.updateProjectV2Collaborators.collaborators.totalCount -ne $userIds.Count){
            Write-Error "Not all users were added to the project"
            return $false
        }

        return $true
    }










} Export-ModuleMember -Function Add-ProjectUser