Watchlist/Edit-Watchlist.psm1

# Edit-Watchlist.psm1
Function Edit-Watchlist {
    [alias("Set-Watchlist")]
    [alias("Update-Watchlist")]
    param(
            [Parameter(mandatory=$True, ValueFromPipelineByPropertyName=$True)]
            [int]
        $Id,

            [Parameter(mandatory=$False)]
            [string]
        $Instance,

            [Parameter(mandatory=$False)]
            [string]
        $Name,

            [Parameter(mandatory=$False)]
            [string]
        $Description,

            [Parameter(mandatory=$False)]
            [string]
        $Search_Query,

            [Parameter(mandatory=$False)]
            [bool]
        $Enabled
    )
    process {
        $UriPath = "/api/v1/watchlist/$Id"
        $Method = "PUT"

        if ($Search_query) {
            # Format and url-encode the search query
            $Search_query = $Search_query | ConvertTo-EncodedSearchQuery
        }
        else { # The search_query field is required to update/edit the watchlist
            try { # If it's blank or non-existant, the query will be blanked on the server too.
                $CurrentWatchlist = Get-Watchlist -Id $Id
                $Search_query = $CurrentWatchlist.search_query
            }
            catch {
                Write-Error "Something went wrong retreiving the details of the existing watchlist."
                Write-Error "Exiting."
                exit
            }
        }

        $Body = @{}
        if ($Name)          {$Body.name = $Name}
        if ($Description)   {$Body.description = $Description}
        if ($Search_query)  {$Body.search_query = $Search_query}
        if ($Enabled)       {$Body.enabled = $Enabled}

        Invoke-Api -Uri $UriPath -Method $Method -Body $Body -Instance $Instance
    }
}