Public/Save-CIEMProvider.ps1

function Save-CIEMProvider {
    <#
    .SYNOPSIS
        Upserts a CIEM cloud provider.
    .DESCRIPTION
        Performs an INSERT OR REPLACE on the providers table. Used for bulk or
        idempotent operations where the caller doesn't care if the row exists.
    .PARAMETER Name
        Provider name (e.g., 'Azure', 'AWS').
    .PARAMETER Enabled
        Whether the provider is enabled. Defaults to $true.
    .PARAMETER InputObject
        A CIEMProvider object to upsert.
    #>

    [CmdletBinding(DefaultParameterSetName = 'ByProperties')]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification = 'Upsert operation for bulk data')]
    [OutputType('CIEMProvider')]
    param(
        [Parameter(Mandatory, ParameterSetName = 'ByProperties')]
        [string]$Name,

        [Parameter(ParameterSetName = 'ByProperties')]
        [bool]$Enabled = $true,

        [Parameter(Mandatory, ParameterSetName = 'InputObject', ValueFromPipeline)]
        [PSObject[]]$InputObject,

        [Parameter()]
        [switch]$PassThru
    )

    process {
        if ($PSCmdlet.ParameterSetName -eq 'InputObject') {
            foreach ($item in $InputObject) {
                $now = (Get-Date).ToString('o')
                Invoke-CIEMQuery -Query @"
INSERT OR REPLACE INTO providers (id, name, type, enabled, created_at, updated_at)
VALUES (@id, @name, @type, @enabled, @now, @now)
"@
 -Parameters @{
                    id      = $item.Name.ToLower()
                    name    = $item.Name
                    type    = $item.Name
                    enabled = if ($item.Enabled) { 1 } else { 0 }
                    now     = $now
                } -AsNonQuery | Out-Null

                if ($PassThru) { Get-CIEMProvider -Name $item.Name }
            }
        } else {
            $now = (Get-Date).ToString('o')
            $providerId = $Name.ToLower()
            Invoke-CIEMQuery -Query @"
INSERT OR REPLACE INTO providers (id, name, type, enabled, created_at, updated_at)
VALUES (@id, @name, @type, @enabled, @now, @now)
"@
 -Parameters @{
                id      = $providerId
                name    = $Name
                type    = $Name
                enabled = if ($Enabled) { 1 } else { 0 }
                now     = $now
            } -AsNonQuery | Out-Null

            if ($PassThru) { Get-CIEMProvider -Name $Name }
        }
    }
}