private/FoundationaLLM-DataPipeline.ps1

function Resolve-PluginObjectIdRecursive {
    param (
        [hashtable]$Object,
        [string]$PropertyName = 'plugin_object_id',
        [string]$ResourceType = 'FoundationaLLM.Plugin/plugins'
    )
    foreach ($key in @($Object.Keys)) {
        if ($key -eq $PropertyName -and $Object[$key] -is [string]) {
            $Object[$key] = Get-ObjectId `
                -Name $Object[$key] `
                -Type $ResourceType
        } elseif ($Object[$key] -is [hashtable]) {
            Resolve-PluginObjectIdRecursive -Object $Object[$key] -PropertyName $PropertyName -ResourceType $ResourceType
        } elseif ($Object[$key] -is [System.Collections.IEnumerable] -and
                 -not ($Object[$key] -is [string])) {
            foreach ($item in $Object[$key]) {
                if ($item -is [hashtable]) {
                    Resolve-PluginObjectIdRecursive -Object $item -PropertyName $PropertyName -ResourceType $ResourceType
                }
            }
        }
    }
}

function Merge-DataPipeline {
    param (
        [hashtable]$DataPipeline
    )

    Resolve-PluginObjectIdRecursive -Object $DataPipeline -PropertyName 'plugin_object_id' -ResourceType 'FoundationaLLM.Plugin/plugins'
    Resolve-PluginObjectIdRecursive -Object $DataPipeline -PropertyName 'data_source_object_id' -ResourceType 'FoundationaLLM.DataSource/dataSources'

    Invoke-ManagementAPI `
        -Method POST `
        -RelativeUri "providers/FoundationaLLM.DataPipeline/dataPipelines/$($DataPipeline['name'])" `
        -Body $DataPipeline
}