Public/ContactGroups/Remove-StatusCakeHelperContactGroup.ps1



<#
.SYNOPSIS
    Removes the specified StatusCake ContactGroup
.DESCRIPTION
    Removes the StatusCake ContactGroup via it's ContactID or GroupName.
.PARAMETER APICredential
    Username and APIKey Credentials to access StatusCake API
.PARAMETER ContactID
    ID of the ContactGroup to be removed
.PARAMETER GroupName
    Name of the Contact Group to be removed
.PARAMETER Force
    Delete the contact group if it is in use
.PARAMETER Passthru
    Return the object to be deleted
.EXAMPLE
    C:\PS>Remove-StatusCakeHelperContactGroup -ContactID 123456
    Remove contact group with ID 123456
.OUTPUTS
    Returns the result of the ContactGroup removal as an object
.LINK
    https://www.statuscake.com/api/Contact%20Groups/Delete%20Contact%20Group.md
.LINK
    https://github.com/Oliver-Lii/statuscake-helpers/blob/master/Documentation/ContactGroups/Remove-StatusCakeHelperContactGroup.md
#>

function Remove-StatusCakeHelperContactGroup
{
    [CmdletBinding(PositionalBinding=$false,SupportsShouldProcess=$true)]
    Param(
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential] $APICredential = (Get-StatusCakeHelperAPIAuth),

        [Parameter(ParameterSetName = "ContactID")]
        [ValidateNotNullOrEmpty()]
        [int]$ContactID,

        [Parameter(ParameterSetName = "GroupName")]
        [ValidateNotNullOrEmpty()]
        [string]$GroupName,

        [switch]$Force,

        [switch]$PassThru
    )

    $checkParams = @{}
    if($GroupName)
    {
        $checkParams.Add("GroupName",$GroupName)
    }
    else
    {
        $checkParams.Add("ContactID",$ContactID)
    }

    if( $pscmdlet.ShouldProcess("StatusCake API", "Retrieve StatusCake Contact Groups") )
    {
        $contactGroup = Get-StatusCakeHelperContactGroup -APICredential $APICredential @checkParams
        if($contactGroup)
        {
            if($contactGroup.GetType().Name -eq 'Object[]')
            {
                Write-Error "Multiple ContactGroups found with name [$GroupName]. Please remove the ContactGroup by ContactID"
                Return $null
            }
            $ContactID = $contactGroup.ContactID
        }
        else
        {
            Write-Error "Unable to find ContactGroup with name [$GroupName]"
            Return $null
        }
    }


    if( $pscmdlet.ShouldProcess("StatusCake API", "Retrieve StatusCake Tests") )
    {
        $StatusCakeTests = Get-StatusCakeHelperTest -APICredential $APICredential
        $StatusCakeTestsWithContact = $StatusCakeTests | Where-Object {$_.ContactGroup -Contains $ContactID}
        if($StatusCakeTestsWithContact -and !$Force)
        {
            Write-Error "ContactGroup in use by tests [$($StatusCakeTestsWithContact.TestID)]. Please use -Force switch to remove this ContactGroup"
            Return $null
        }
    }

    $requestParams = @{
        uri = "https://app.statuscake.com/API/ContactGroups/Update/?ContactID=$ContactID"
        Headers = @{"Username"=$APICredential.Username;"API"=$APICredential.GetNetworkCredential().password}
        UseBasicParsing = $true
        Method = "Delete"
    }

    if( $pscmdlet.ShouldProcess("ContactID - $ContactID", "Remove StatusCake ContactGroup") )
    {
        $response = Invoke-RestMethod @requestParams
        $requestParams=@{}
        if($response.Success -ne "True")
        {
            Write-Error "$($response.Message) [$($response.Issues)]"
        }
        elseif($PassThru)
        {
            Return $contactGroup
        }
    }
}