public/Get-Book.ps1

function Get-Book {
    <#
    .SYNOPSIS
    Retrieves books from the Bookworm database.
    
    .DESCRIPTION
    Queries the Books table based on ISBN, Title, or Author parameters.
    If no parameters are provided, returns all books.
    
    .PARAMETER ISBN
    Filter by ISBN (exact match).
    
    .PARAMETER Title
    Filter by Title (partial match, case-insensitive).
    
    .PARAMETER Author
    Filter by Author (partial match, case-insensitive).
    Note: Currently not implemented in schema, reserved for future use.
    
    .PARAMETER DatabasePath
    Path to the SQLite database file. Defaults to module data directory.
    
    .PARAMETER Limit
    Maximum number of results to return. Defaults to 100.
    
    .EXAMPLE
    Get-Book
    Returns all books in the Bookworm.
    
    .EXAMPLE
    Get-Book -ISBN '9780134685991'
    Returns the book with the specified ISBN.
    
    .EXAMPLE
    Get-Book -Title 'Clean Code'
    Returns all books with titles containing 'Clean Code'.
    
    .EXAMPLE
    Get-Book -Limit 10
    Returns the 10 most recently scanned books.
    #>

    [CmdletBinding(DefaultParameterSetName='All')]
    Param(
        [Parameter(ParameterSetName='ISBN')]
        [String]
        $ISBN,

        [Parameter(ParameterSetName='Title')]
        [String]
        $Title,

        [Parameter(ParameterSetName='Author')]
        [String]
        $Author,
        
        [Parameter()]
        [String]
        $DatabasePath,
        
        [Parameter()]
        [int]
        $Limit = 100
    )

    process {
        # Use module-level database path if not provided
        if (-not $DatabasePath) {
            $DatabasePath = $script:DatabasePath
        }
        
        try {
            # Build WHERE clause based on parameters
            $WhereConditions = @()
            
            if ($ISBN) {
                $EscapedISBN = $ISBN -replace "'", "''"
                $WhereConditions += "ISBN = '$EscapedISBN'"
            }
            
            if ($Title) {
                $EscapedTitle = $Title -replace "'", "''"
                $WhereConditions += "Title LIKE '%$EscapedTitle%'"
            }
            
            if ($Author) {
                # Note: Author field not yet in schema, but keeping for future use
                $EscapedAuthor = $Author -replace "'", "''"
                $WhereConditions += "Author LIKE '%$EscapedAuthor%'"
            }
            
            # Build the query
            $Query = "SELECT * FROM Books"
            
            if ($WhereConditions.Count -gt 0) {
                $Query += " WHERE " + ($WhereConditions -join " AND ")
            }
            
            # Order by most recently scanned
            $Query += " ORDER BY ScannedAt DESC"
            
            # Add limit
            $Query += " LIMIT $Limit"
            
            Write-Verbose "Executing query: $Query"
            
            # Execute query
            $Results = Invoke-UniversalSQLiteQuery -Path $DatabasePath -Query $Query
            
            if ($Results) {
                return $Results
            }
            else {
                Write-Verbose "No books found matching the criteria."
                return $null
            }
        }
        catch {
            Write-Error "Failed to retrieve books: $_"
            throw
        }
    }
}