modules/Azure/Discovery/Private/SaveCIEMAzureResourceType.ps1

function SaveCIEMAzureResourceType {
    [CmdletBinding(DefaultParameterSetName = 'ByProperties')]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification = 'Private helper, upsert operation for bulk data')]
    [OutputType('CIEMAzureResourceType[]')]
    param(
        [Parameter(Mandatory, ParameterSetName = 'ByProperties')]
        [string]$Type,

        [Parameter(Mandatory, ParameterSetName = 'ByProperties')]
        [string]$ApiSource,

        [Parameter(ParameterSetName = 'ByProperties')]
        [string]$GraphTable,

        [Parameter(ParameterSetName = 'ByProperties')]
        [int]$ResourceCount = 0,

        [Parameter(ParameterSetName = 'ByProperties')]
        [string]$DiscoveredAt,

        [Parameter(ParameterSetName = 'ByProperties')]
        [string]$LastCollected,

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

        [Parameter()]
        $Connection
    )

    process {
        if ($PSCmdlet.ParameterSetName -eq 'InputObject') {
            foreach ($obj in $InputObject) {
                $discoveredAt = if ($obj.DiscoveredAt) { $obj.DiscoveredAt } else { (Get-Date).ToString('o') }
                $parameters = @{
                    type           = $obj.Type
                    api_source     = $obj.ApiSource
                    graph_table    = $obj.GraphTable
                    resource_count = $obj.ResourceCount
                    discovered_at  = $discoveredAt
                    last_collected = $obj.LastCollected
                }

                $sql = @"
INSERT OR REPLACE INTO azure_resource_types (type, api_source, graph_table, resource_count, discovered_at, last_collected)
VALUES (@type, @api_source, @graph_table, @resource_count, @discovered_at, @last_collected)
"@


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

        if (-not $DiscoveredAt) {
            $DiscoveredAt = (Get-Date).ToString('o')
        }

        $parameters = @{
            type           = $Type
            api_source     = $ApiSource
            graph_table    = $GraphTable
            resource_count = $ResourceCount
            discovered_at  = $DiscoveredAt
            last_collected = $LastCollected
        }

        $sql = @"
INSERT OR REPLACE INTO azure_resource_types (type, api_source, graph_table, resource_count, discovered_at, last_collected)
VALUES (@type, @api_source, @graph_table, @resource_count, @discovered_at, @last_collected)
"@


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