Modules/AzureDevOpsDsc.Common/Api/Functions/Private/Api/ClassificationNodes/Remove-ClassificationNode.ps1

Function Remove-ClassificationNode {
    param(
        [Parameter(Mandatory)]
        [String]$OrganizationName,

        [Parameter(Mandatory)]
        [String]$ProjectName,

        [Parameter(Mandatory)]
        [ValidateSet('Areas', 'Iterations')]
        [String]$StructureType,

        [Parameter(Mandatory)]
        [String]$Path,

        [Parameter()]
        [String]$ReclassificationId,

        [Parameter()]
        [String]
        $ApiVersion = $(Get-AzDevOpsApiVersion -Default)
    )

    Write-Verbose "[Remove-ClassificationNode] Started."
    Write-Verbose "[Remove-ClassificationNode] Organization Name: $OrganizationName"
    Write-Verbose "[Remove-ClassificationNode] Project Name: $ProjectName"
    Write-Verbose "[Remove-ClassificationNode] Structure Type: $StructureType"
    Write-Verbose "[Remove-ClassificationNode] Path: $Path"
    Write-Verbose "[Remove-ClassificationNode] Reclassification Id: $ReclassificationId"
    Write-Verbose "[Remove-ClassificationNode] API Version: $ApiVersion"

    # If the ReclassificationId exists, amend the ReclassificationId to the URI
    if ($ReclassificationId) {
        $Uri = 'https://dev.azure.com/{0}/{1}/_apis/wit/classificationnodes/{2}/{3}?api-version={4}&$reclassifyId={5}' -f $OrganizationName,
                                                                                            $ProjectName,
                                                                                            $StructureType,
                                                                                            $Path,
                                                                                            $ApiVersion,
                                                                                            $ReclassificationId
    } else {
        $Uri = 'https://dev.azure.com/{0}/{1}/_apis/wit/classificationnodes/{2}/{3}?api-version={4}' -f $OrganizationName,
                                                                                            $ProjectName,
                                                                                            $StructureType,
                                                                                            $Path,
                                                                                            $ApiVersion
    }

    $params = @{
        Uri = $Uri
        Method = 'DELETE'
    }

    Write-Verbose "[Remove-ClassificationNode] Uri: $($params.Uri)"

    try
    {
        <#
            Call the Invoke-AzDevOpsApiRestMethod function with the parameters defined above.
            The "@" symbol is used to pass the hashtable as splatting parameters.
        #>

        Write-Verbose "[Remove-ClassificationNode] Attempting to invoke REST method remove classification node:"
        $null = Invoke-AzDevOpsApiRestMethod @params

    }
    catch
    {
        # If an exception occurs, write an error message to the console with details about the issue.
        Write-Error "[Remove-ClassificationNode] Failed to remove classification node: $($_.Exception.Message)"
    }

}