private/Initialize-RecipeDatabase.ps1

function Initialize-RecipeDatabase {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory)]
        [ValidateScript({ Test-Path $_ })]
        [String]
        $Schema,

        [Parameter(Mandatory)]
        [ValidateScript({ Test-Path $_ })]
        [String]
        $Database
    )
    <#
    .SYNOPSIS
        Creates the database file if missing and applies schema.
    .DESCRIPTION
        This is idempotent: safe to run at startup and on every module import.
    #>


    # Apply schema
    Invoke-UniversalSQLiteQuery -Path $Script:RecipeDbPath -Query $Script:RecipeSchemaSql | Out-Null
    # ---- Favorites Migration ----
    $cols = Invoke-UniversalSQLiteQuery -Path $Script:RecipeDbPath -Query "PRAGMA table_info(Recipes);"

    if (($cols | Where-Object { $_.name -eq 'IsFavorite' }).Count -eq 0) {
        $Null = Invoke-UniversalSQLiteQuery -Path $Script:RecipeDbPath -Query 'ALTER TABLE Recipes ADD COLUMN IsFavorite INTEGER NOT NULL DEFAULT 0;'
    }

    if (($cols | Where-Object { $_.name -eq 'FavoritedAt' }).Count -eq 0) {
        $null = Invoke-UniversalSQLiteQuery -Path $Script:RecipeDbPath -Query 'ALTER TABLE Recipes ADD COLUMN FavoritedAt TEXT;'
    }

    if(($cols | Where-Object { $_.name -eq 'ImageFileName'}).Count -eq 0) {
        $null = Invoke-UniversalSQLiteQuery -Path $script:RecipeDbPath -Query 'ALTER TABLE Recipes ADD COLUMN ImageFileName TEXT NULL;'
    }

    if(($cols | Where-Object { $_.name -eq 'ImageUpdatedAt'}).Count -eq 0) {
        $null = Invoke-UniversalSQLiteQuery -Path $script:RecipeDbPath -Query 'ALTER TABLE Recipes ADD COLUMN ImageUpdatedAt TEXT NULL;'
    }
}