modules/Azure/Discovery/Private/RemoveCIEMAzureEntity.ps1

function RemoveCIEMAzureEntity {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$Entity,

        [Parameter()]
        [hashtable]$Filters = @{},

        [Parameter()]
        [switch]$All,

        [Parameter()]
        [object]$Connection
    )

    $ErrorActionPreference = 'Stop'

    $config = GetCIEMAzureEntityConfig -Entity $Entity
    if ($All -and $Filters.Count -gt 0) {
        throw "RemoveCIEMAzureEntity: entity '$Entity' cannot combine -All with filters."
    }
    if (-not $All -and $Filters.Count -eq 0) {
        throw "RemoveCIEMAzureEntity: entity '$Entity' requires filters or -All."
    }

    $parameters = @{}
    $whereClauses = [System.Collections.Generic.List[string]]::new()

    foreach ($filterName in ($Filters.Keys | Sort-Object)) {
        if (-not $config.FilterColumns.ContainsKey($filterName)) {
            throw "RemoveCIEMAzureEntity: unknown filter '$filterName' for entity '$Entity'."
        }

        $column = $config.FilterColumns[$filterName]
        $whereClauses.Add("$column = @$column")
        $parameters[$column] = $Filters[$filterName]
    }

    $query = "DELETE FROM $($config.Table)"
    if ($whereClauses.Count -gt 0) {
        $query += " WHERE " + ($whereClauses -join ' AND ')
    }

    if ($Connection) {
        Invoke-PSUSQLiteQuery -Connection $Connection -Query $query -Parameters $parameters -AsNonQuery | Out-Null
    } else {
        Invoke-CIEMQuery -Query $query -Parameters $parameters -AsNonQuery | Out-Null
    }
}