public/Set-RecipeImage.ps1

function Set-RecipeImage {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [int]$RecipeId,

        [Parameter(Mandatory)]
        [byte[]]$Bytes,

        [string]$OriginalFileName
    )

    # Determine extension from original name (fallback .jpg)
    $ext = ".jpg"
    if ($OriginalFileName) {
        $maybe = [System.IO.Path]::GetExtension($OriginalFileName)
        if ($maybe -and $maybe.Length -le 5) {
            $ext = $maybe.ToLower()
        }
    }

    $fileName = "Recipe_{0}{1}" -f $RecipeId, $ext
    $path     = Get-RecipeImageFilePath -RecipeId $RecipeId -Extension $ext

    # Write to disk
    [System.IO.File]::WriteAllBytes($path, $Bytes)

    $fileSafe = $fileName.Replace("'", "''")

    # Update metadata in DB
    Invoke-RecipeDbQuery -Query @"
UPDATE Recipes
SET ImageFileName = '$fileSafe',
    ImageUpdatedAt = datetime('now'),
    UpdatedAt = datetime('now')
WHERE RecipeId = $RecipeId;
"@
 | Out-Null
}