Private/InvokeCIEMTransaction.ps1

function InvokeCIEMTransaction {
    param(
        [Parameter(Mandatory)]
        [scriptblock]$ScriptBlock
    )

    $ErrorActionPreference = 'Stop'

    $databasePath = Get-CIEMDatabasePath
    if (-not (Test-Path $databasePath)) {
        throw "CIEM database is not initialized at '$databasePath'. Module setup must create or migrate the database before transactions run."
    }

    $conn = Open-PSUSQLiteConnection -Database $databasePath
    Invoke-PSUSQLiteQuery -Connection $conn -Query "PRAGMA foreign_keys=ON" -AsNonQuery | Out-Null
    Invoke-PSUSQLiteQuery -Connection $conn -Query "BEGIN TRANSACTION" -AsNonQuery | Out-Null

    try {
        & $ScriptBlock $conn
        Invoke-PSUSQLiteQuery -Connection $conn -Query "COMMIT" -AsNonQuery | Out-Null
    }
    catch {
        Invoke-PSUSQLiteQuery -Connection $conn -Query "ROLLBACK" -AsNonQuery | Out-Null
        throw
    }
    finally {
        $conn.Dispose()
    }
}