Pax8API/Public/Get-Pax8Products.ps1

function Get-Pax8Products {
    [CmdletBinding()]
    param (
        [ValidateRange(0, [int]::MaxValue)]
        [int]$Page = 0,

        [ValidateRange(1, 200)]
        [int]$Size = 10,

        [ValidateSet('name', 'vendor')]
        [string]$Sort,

        [string]$Search,

        [string]$VendorName,

        [ValidateSet('asc', 'desc')]
        [string]$Direction,

        [string[]]$MatchProperty = @('name', 'vendorName', 'sku', 'vendorSku', 'altVendorSku'),

        [switch]$IncludeDescription,

        [switch]$Exact,

        [switch]$ForceClientSide,

        [switch]$NoClientSideFallback,

        [switch]$All,

        [switch]$Raw
    )

    if ($Search -or $ForceClientSide) {
        $findParameters = @{
            Page = $Page
            Size = $Size
            MatchProperty = $MatchProperty
        }
        if ($Search) { $findParameters.Search = $Search }
        if ($VendorName) { $findParameters.VendorName = $VendorName }
        if ($Sort) { $findParameters.Sort = $Sort }
        if ($Direction) { $findParameters.Direction = $Direction }
        if ($IncludeDescription) { $findParameters.IncludeDescription = $true }
        if ($Exact) { $findParameters.Exact = $true }
        if ($ForceClientSide) { $findParameters.ForceClientSide = $true }
        if ($NoClientSideFallback) { $findParameters.NoClientSideFallback = $true }
        if ($All) { $findParameters.All = $true }
        if ($Raw) { $findParameters.Raw = $true }

        return Find-Pax8Product @findParameters
    }

    $parameters = @{
        Page = $Page
        Size = $Size
    }
    if ($VendorName) { $parameters.VendorName = $VendorName }
    if ($Sort) { $parameters.Sort = $Sort }
    if ($Direction) { $parameters.Direction = $Direction }
    if ($All) { $parameters.All = $true }
    if ($Raw) { $parameters.Raw = $true }

    Get-Pax8Product @parameters
}