Organizations.psm1

function Get-GithubOrganization {
    [CmdletBinding(DefaultParameterSetName='Mine')]
    [OutputType('Github.Organization')]
    param(
        [Parameter(Position=0, ParameterSetName='ByName')]
        [string]
        $Name,

        [Parameter(Mandatory, ParameterSetName='ByUser')]
        [string]
        $Username,

        [Parameter(ParameterSetName='Mine')]
        [switch]
        $Mine,

        [Parameter()]
        [uint]
        $MaxPages,

        [switch]
        [Parameter()]
        $All,

        [Parameter()]
        [string]
        $Select
    )

    if ($Name) {
        # https://docs.github.com/en/rest/orgs/orgs#get-an-organization
        Invoke-GithubApi GET "orgs/$Name" |
            New-GithubObject 'Github.Organization' |
            Get-FilteredObject $Select
    }
    elseif ($Username) {
        $MaxPages = Resolve-GithubMaxPages -MaxPages:$MaxPages -All:$All
        # https://docs.github.com/en/rest/orgs/orgs#list-organizations-for-a-user
        Invoke-GithubApi GET "users/$Username/orgs" -MaxPages $MaxPages |
            New-GithubObject 'Github.Organization' |
            Get-FilteredObject $Select
    }
    else {
        # Mine (default) - authenticated user's orgs
        $MaxPages = Resolve-GithubMaxPages -MaxPages:$MaxPages -All:$All
        # https://docs.github.com/en/rest/orgs/orgs#list-organizations-for-the-authenticated-user
        Invoke-GithubApi GET "user/orgs" -MaxPages $MaxPages |
            New-GithubObject 'Github.Organization' |
            Get-FilteredObject $Select
    }
}