Public/Guests.ps1

<#
.SYNOPSIS
    Get ClickUp guest.
.DESCRIPTION
    Get ClickUp guest.
.EXAMPLE
    PS C:\> Get-ClickUpGuest -TeamID 333 -GuestID 403
    Guest ClickUp guest user with ID "403" for team with ID "333".
.INPUTS
    None
.OUTPUTS
    System.Management.Automation.PSCustomObject.
.NOTES
    See the link for information.
.LINK
    https://jsapi.apiary.io/apis/clickup20/reference/0/guests/get-guest.html
#>

function Get-ClickUpGuest {
    [CmdletBinding()]
    [OutputType([System.Management.Automation.PSCustomObject])]
    param (
        [Parameter(Mandatory = $True)]
        [UInt64]$TeamID,
        [Parameter(Mandatory = $True)]
        [UInt64]$GuestID
    )

    $Guest = Invoke-ClickUpAPIGet -Endpoint "team/$TeamID/guest/$GuestID"
    Return $Guest.guest
}

<#
.SYNOPSIS
    Invite ClickUp guest to workspace.
.DESCRIPTION
    Invite ClickUp guest to workspace.
.EXAMPLE
    PS C:\> Add-ClickUpGuest -TeamID 333 -GuestEmail 'guest@example.com'
    Add ClickUp guest user with email "guest@example.com" for team with ID "333".
.EXAMPLE
    PS C:\> Add-ClickUpGuest -TeamID 333 -GuestEmail 'guest@example.com' -CanEditTags $true -CanSeeTimeSpent $true -CanSeeTimeEstimated $true
    Add ClickUp guest user with email "guest@example.com" for team with ID "333" and give them access to edit tags, see time spent, and see time estimated.
.INPUTS
    None
.OUTPUTS
    System.Management.Automation.PSCustomObject.
.NOTES
    See the link for information.
.LINK
    https://jsapi.apiary.io/apis/clickup20/reference/0/goals/invite-guest-to-workspace.html
#>

function Add-ClickUpGuest {
    [CmdletBinding()]
    [OutputType([System.Management.Automation.PSCustomObject])]
    param (
        [Parameter(Mandatory = $True)]
        [UInt64]$TeamID,
        [Parameter(Mandatory = $True)]
        [string]$GuestEmail,
        [Parameter()]
        [bool]$CanEditTags = $false,
        [Parameter()]
        [bool]$CanSeeTimeSpent = $false,
        [Parameter()]
        [bool]$CanSeeTimeEstimated = $false
    )

    $Body = @{
        email                  = $GuestEmail
        can_edit_tags          = $CanEditTags
        can_see_time_spent     = $CanSeeTimeSpent
        can_see_time_estimated = $CanSeeTimeEstimated
    }

    $Team = Invoke-ClickUpAPIPost -Endpoint "team/$TeamID/guest" -Body $Body
    Return $Team.team
}

<#
.SYNOPSIS
    Update ClickUp guest on workspace.
.DESCRIPTION
    Update ClickUp guest on workspace.
.EXAMPLE
    PS C:\> Set-ClickUpGuest -TeamID 333 -GuestID 403 -Username 'Guest User'
    Update ClickUp guest's username to "Guest User" for guest with ID "403".
.EXAMPLE
    PS C:\> Set-ClickUpGuest -TeamID 333 -GuestID 403 -CanEditTags $true -CanSeeTimeSpent $true -CanSeeTimeEstimated $true
    Update ClickUp guest user's permissions to edit tags, see time spent, and see time estimated for guest with ID "403".
.INPUTS
    None
.OUTPUTS
    System.Management.Automation.PSCustomObject.
.NOTES
    See the link for information.
.LINK
    https://jsapi.apiary.io/apis/clickup20/reference/0/guests/edit-guest-on-workspace.html
#>

function Set-ClickUpGuest {
    [CmdletBinding()]
    [OutputType([System.Management.Automation.PSCustomObject])]
    param (
        [Parameter(Mandatory = $True)]
        [UInt64]$TeamID,
        [Parameter()]
        [string]$Username,
        [Parameter()]
        [bool]$CanEditTags = $false,
        [Parameter()]
        [bool]$CanSeeTimeSpent = $false,
        [Parameter()]
        [bool]$CanSeeTimeEstimated = $false
    )

    $Body = @{}

    if ($PSBoundParameters.ContainsKey('Username')) {
        $Body.Add('username', $Username)
    }
    if ($PSBoundParameters.ContainsKey('CanEditTags')) {
        $Body.Add('can_edit_tags', $CanEditTags)
    }
    if ($PSBoundParameters.ContainsKey('CanSeeTimeSpent')) {
        $Body.Add('can_see_time_spent', $CanSeeTimeSpent)
    }
    if ($PSBoundParameters.ContainsKey('CanSeeTimeEstimated')) {
        $Body.Add('can_see_time_estimated', $CanSeeTimeEstimated)
    }

    $Guest = Invoke-ClickUpAPIPut -Endpoint "team/$TeamID/guest" -Body $Body
    Return $Guest.guest
}

<#
.SYNOPSIS
    Add ClickUp guest to task.
.DESCRIPTION
    Add ClickUp guest to task.
.EXAMPLE
    PS C:\> Add-ClickUpGuestToTask -TaskID c04 -GuestID 403
    Add ClickUp guest user with ID "403" to task with ID "c04" with permission level "read".
.EXAMPLE
    PS C:\> Add-ClickUpGuestToTask -TaskID c04 -GuestID 403 -PermissionLevel edit
    Add ClickUp guest user with ID "403" to task with ID "c04" with permission level "edit".
.EXAMPLE
    PS C:\> Add-ClickUpGuestToTask -TaskID CustomID -GuestID 403 -CustomTaskIDs $true -TeamID 123 -PermissionLevel edit.
    Add ClickUp guest user with custom ID "CustomID" to task with ID "c04" with permission level "edit".
.INPUTS
    None
.OUTPUTS
    System.Management.Automation.PSCustomObject.
.NOTES
    See the link for information.
.LINK
    https://jsapi.apiary.io/apis/clickup20/reference/0/guests/add-guest-to-task.html
#>

function Add-ClickUpGuestToTask {
    [CmdletBinding(DefaultParameterSetName = 'TaskID')]
    [OutputType([System.Management.Automation.PSCustomObject])]
    param (
        [Parameter(Mandatory = $true, ParameterSetName = 'TaskID')]
        [Parameter(Mandatory = $true, ParameterSetName = 'CustomTaskIDs')]
        [string]$TaskID,
        [Parameter(Mandatory = $true, ParameterSetName = 'TaskID')]
        [Parameter(Mandatory = $true, ParameterSetName = 'CustomTaskIDs')]
        [UInt64]$GuestID,
        [Parameter(ParameterSetName = 'TaskID')]
        [Parameter(ParameterSetName = 'CustomTaskIDs')]
        [ValidateSet('read', 'comment', 'edit', 'create')]
        [string]$PermissionLevel = 'read',
        [Parameter(Mandatory = $true, ParameterSetName = 'CustomTaskIDs')]
        [bool]$CustomTaskIDs,
        [Parameter(Mandatory = $true, ParameterSetName = 'CustomTaskIDs')]
        [UInt64]$TeamID
    )

    $Body = @{
        permission_level = $PermissionLevel
    }

    if ($PSBoundParameters.ContainsKey('CustomTaskIDs')) {
        $QueryString = @{
            custom_task_ids = $CustomTaskIDs
            team_id         = $TeamID
        }
    } else {
        $QueryString = @{}
    }

    $Guest = Invoke-ClickUpAPIPost -Arguments $QueryString -Endpoint "task/$TaskID/guest/$GuestID" -Body $Body
    Return $Guest.guest
}

<#
.SYNOPSIS
    Add ClickUp guest to list.
.DESCRIPTION
    Add ClickUp guest to list.
.EXAMPLE
    PS C:\> Add-ClickUpGuestToList -ListID 1427 -GuestID 403
    Add ClickUp guest user with ID "403" to list with ID "1427" with permission level "read".
.EXAMPLE
    PS C:\> Add-ClickUpGuestToList -ListID 1427 -GuestID 403 -PermissionLevel edit
    Add ClickUp guest user with ID "403" to list with ID "1427" with permission level "edit".
.INPUTS
    None
.OUTPUTS
    System.Management.Automation.PSCustomObject.
.NOTES
    See the link for information.
.LINK
    https://jsapi.apiary.io/apis/clickup20/reference/0/guests/add-guest-to-list.html
#>

function Add-ClickUpGuestToTask {
    [CmdletBinding(DefaultParameterSetName = 'TaskID')]
    [OutputType([System.Management.Automation.PSCustomObject])]
    param (
        [Parameter(Mandatory = $true)]
        [UInt64]$ListID,
        [Parameter(Mandatory = $true)]
        [UInt64]$GuestID,
        [Parameter()]
        [ValidateSet('read', 'comment', 'edit', 'create')]
        [string]$PermissionLevel = 'read'
    )

    $Body = @{
        permission_level = $PermissionLevel
    }

    $Guest = Invoke-ClickUpAPIPost -Endpoint "list/$ListID/guest/$GuestID" -Body $Body
    Return $Guest.guest
}

<#
.SYNOPSIS
    Add ClickUp guest to folder.
.DESCRIPTION
    Add ClickUp guest to folder.
.EXAMPLE
    PS C:\> Add-ClickUpGuestToFolder -FolderID 1057 -GuestID 403
    Add ClickUp guest user with ID "403" to folder with ID "1057" with permission level "read".
.EXAMPLE
    PS C:\> Add-ClickUpGuestToList -FolderID 1057 -GuestID 403 -PermissionLevel edit
    Add ClickUp guest user with ID "403" to folder with ID "1057" with permission level "edit".
.INPUTS
    None
.OUTPUTS
    System.Management.Automation.PSCustomObject.
.NOTES
    See the link for information.
.LINK
    https://jsapi.apiary.io/apis/clickup20/reference/0/guests/add-guest-to-folder.html
#>

function Add-ClickUpGuestToFolder {
    [CmdletBinding(DefaultParameterSetName = 'TaskID')]
    [OutputType([System.Management.Automation.PSCustomObject])]
    param (
        [Parameter(Mandatory = $true)]
        [UInt64]$FolderID,
        [Parameter(Mandatory = $true)]
        [UInt64]$GuestID,
        [Parameter()]
        [ValidateSet('read', 'comment', 'edit', 'create')]
        [string]$PermissionLevel = 'read'
    )

    $Body = @{
        permission_level = $PermissionLevel
    }

    $Guest = Invoke-ClickUpAPIPost -Endpoint "list/$ListID/guest/$GuestID" -Body $Body
    Return $Guest.guest
}

<#
.SYNOPSIS
    Remove ClickUp guest from workspace.
.DESCRIPTION
    Remove ClickUp guest from workspace.
.EXAMPLE
    PS C:\> Remove-ClickUpGuest -TeamID 333 -GuestID 403
    Remove ClickUp guest with Id "403" from team with ID "333".
.INPUTS
    None
.OUTPUTS
    System.Management.Automation.PSCustomObject.
.NOTES
    See the link for information.
.LINK
    https://jsapi.apiary.io/apis/clickup20/reference/0/guests/remove-guest-from-workspace.html
#>

function Remove-ClickUpGuest {
    [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High')]
    [OutputType([System.Management.Automation.PSCustomObject])]
    param (
        [Parameter(Mandatory = $true)]
        [UInt64]$TeamID,
        [Parameter(Mandatory = $true)]
        [UInt64]$GuestID
    )

    if ($PSCmdlet.ShouldProcess($GuestID)) {
        $Team = Invoke-ClickUpAPIDelete -Endpoint "team/$TeamID/guest/$GuestID"
        $Team.team
    }
}

<#
.SYNOPSIS
    Remove ClickUp guest from task.
.DESCRIPTION
    Remove ClickUp guest from task.
.EXAMPLE
    PS C:\> Remove-ClickUpGuestFromTask -TaskID 1427 -GuestID 403
    Remove ClickUp guest with Id "403" from task with ID "1427".
.INPUTS
    None
.OUTPUTS
    System.Management.Automation.PSCustomObject.
.NOTES
    See the link for information.
.LINK
    https://jsapi.apiary.io/apis/clickup20/reference/0/guests/remove-guest-from-task.html
#>

function Remove-ClickUpGuestFromTask {
    [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High', DefaultParameterSetName = 'TaskID')]
    [OutputType([System.Management.Automation.PSCustomObject])]
    param (
        [Parameter(Mandatory = $true, ParameterSetName = 'TaskID')]
        [Parameter(Mandatory = $true, ParameterSetName = 'CustomTaskIDs')]
        [string]$TaskID,
        [Parameter(Mandatory = $true, ParameterSetName = 'TaskID')]
        [Parameter(Mandatory = $true, ParameterSetName = 'CustomTaskIDs')]
        [UInt64]$GuestID,
        [Parameter(ParameterSetName = 'TaskID')]
        [Parameter(ParameterSetName = 'CustomTaskIDs')]
        [ValidateSet('read', 'comment', 'edit', 'create')]
        [string]$PermissionLevel = 'read',
        [Parameter(Mandatory = $true, ParameterSetName = 'CustomTaskIDs')]
        [bool]$CustomTaskIDs,
        [Parameter(Mandatory = $true, ParameterSetName = 'CustomTaskIDs')]
        [UInt64]$TeamID
    )

    if ($PSBoundParameters.ContainsKey('CustomTaskIDs')) {
        $QueryString = @{
            custom_task_ids = $CustomTaskIDs
            team_id         = $TeamID
        }
    } else {
        $QueryString = @{}
    }

    if ($PSCmdlet.ShouldProcess($GuestID)) {
        $Guest = Invoke-ClickUpAPIDelete -Arguments $QueryString -Endpoint "task/$TaskID/guest/$GuestID"
        $Guest.guest
    }
}

<#
.SYNOPSIS
    Remove ClickUp guest from list.
.DESCRIPTION
    Remove ClickUp guest from list.
.EXAMPLE
    PS C:\> Remove-ClickUpGuestFromList -ListID c04 -GuestID 403
    Remove ClickUp guest with Id "403" from list with ID "c04".
.INPUTS
    None
.OUTPUTS
    System.Management.Automation.PSCustomObject.
.NOTES
    See the link for information.
.LINK
    https://jsapi.apiary.io/apis/clickup20/reference/0/guests/remove-guest-from-list.html
#>

function Remove-ClickUpGuestFromList {
    [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High')]
    [OutputType([System.Management.Automation.PSCustomObject])]
    param (
        [Parameter(Mandatory = $true)]
        [string]$ListID,
        [Parameter(Mandatory = $true)]
        [UInt64]$GuestID
    )

    if ($PSCmdlet.ShouldProcess($GuestID)) {
        $Guest = Invoke-ClickUpAPIDelete -Endpoint "list/$ListID/guest/$GuestID"
        $Guest.guest
    }
}

<#
.SYNOPSIS
    Remove ClickUp guest from folder.
.DESCRIPTION
    Remove ClickUp guest from folder.
.EXAMPLE
    PS C:\> Remove-ClickUpGuestFromFolder -FolderID 1057 -GuestID 403
    Remove ClickUp guest with Id "403" from folder with ID "1057".
.INPUTS
    None
.OUTPUTS
    System.Management.Automation.PSCustomObject.
.NOTES
    See the link for information.
.LINK
    https://jsapi.apiary.io/apis/clickup20/reference/0/guests/remove-guest-from-folder.html
#>

function Remove-ClickUpGuestFromFolder {
    [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High')]
    [OutputType([System.Management.Automation.PSCustomObject])]
    param (
        [Parameter(Mandatory = $true)]
        [string]$FolderID,
        [Parameter(Mandatory = $true)]
        [UInt64]$GuestID
    )

    if ($PSCmdlet.ShouldProcess($GuestID)) {
        $Guest = Invoke-ClickUpAPIDelete -Endpoint "folder/$FolderID/guest/$GuestID"
        $Guest.guest
    }
}