Model/Search.ps1

#
# Identity Security Cloud V3 API
# Use these APIs to interact with the Identity Security Cloud platform to achieve repeatable, automated processes with greater scalability. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.
# Version: 3.0.0
# Generated by OpenAPI Generator: https://openapi-generator.tech
#

<#
.SYNOPSIS

No summary available.

.DESCRIPTION

No description available.

.PARAMETER Indices
The names of the Elasticsearch indices in which to search. If none are provided, then all indices will be searched.
.PARAMETER QueryType
No description available.
.PARAMETER QueryVersion
No description available.
.PARAMETER Query
No description available.
.PARAMETER QueryDsl
The search query using the Elasticsearch [Query DSL](https://www.elastic.co/guide/en/elasticsearch/reference/7.10/query-dsl.html) syntax.
.PARAMETER TextQuery
No description available.
.PARAMETER TypeAheadQuery
No description available.
.PARAMETER IncludeNested
Indicates whether nested objects from returned search results should be included.
.PARAMETER QueryResultFilter
No description available.
.PARAMETER AggregationType
No description available.
.PARAMETER AggregationsVersion
No description available.
.PARAMETER AggregationsDsl
The aggregation search query using Elasticsearch [Aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations.html) syntax.
.PARAMETER Aggregations
No description available.
.PARAMETER Sort
The fields to be used to sort the search results. Use + or - to specify the sort direction.
.PARAMETER SearchAfter
Used to begin the search window at the values specified. This parameter consists of the last values of the sorted fields in the current record set. This is used to expand the Elasticsearch limit of 10K records by shifting the 10K window to begin at this value. It is recommended that you always include the ID of the object in addition to any other fields on this parameter in order to ensure you don't get duplicate results while paging. For example, when searching for identities, if you are sorting by displayName you will also want to include ID, for example [""displayName"", ""id""]. If the last identity ID in the search result is 2c91808375d8e80a0175e1f88a575221 and the last displayName is ""John Doe"", then using that displayName and ID will start a new search after this identity. The searchAfter value will look like [""John Doe"",""2c91808375d8e80a0175e1f88a575221""]
.PARAMETER Filters
The filters to be applied for each filtered field name.
.OUTPUTS

Search<PSCustomObject>
#>


function Initialize-Search {
    [CmdletBinding()]
    Param (
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [PSCustomObject[]]
        ${Indices},
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [ValidateSet("DSL", "SAILPOINT", "TEXT", "TYPEAHEAD")]
        [PSCustomObject]
        ${QueryType},
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [System.Nullable[String]]
        ${QueryVersion},
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [PSCustomObject]
        ${Query},
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [PSCustomObject]
        ${QueryDsl},
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [PSCustomObject]
        ${TextQuery},
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [PSCustomObject]
        ${TypeAheadQuery},
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [System.Nullable[Boolean]]
        ${IncludeNested} = $true,
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [PSCustomObject]
        ${QueryResultFilter},
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [ValidateSet("DSL", "SAILPOINT")]
        [PSCustomObject]
        ${AggregationType},
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [System.Nullable[String]]
        ${AggregationsVersion},
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [PSCustomObject]
        ${AggregationsDsl},
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [PSCustomObject]
        ${Aggregations},
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [String[]]
        ${Sort},
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [String[]]
        ${SearchAfter},
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [System.Collections.Hashtable]
        ${Filters}
    )

    Process {
        'Creating PSCustomObject: PSSailpoint.V3 => Search' | Write-Debug
        $PSBoundParameters | Out-DebugParameter | Write-Debug


        $PSO = [PSCustomObject]@{
            "indices" = ${Indices}
            "queryType" = ${QueryType}
            "queryVersion" = ${QueryVersion}
            "query" = ${Query}
            "queryDsl" = ${QueryDsl}
            "textQuery" = ${TextQuery}
            "typeAheadQuery" = ${TypeAheadQuery}
            "includeNested" = ${IncludeNested}
            "queryResultFilter" = ${QueryResultFilter}
            "aggregationType" = ${AggregationType}
            "aggregationsVersion" = ${AggregationsVersion}
            "aggregationsDsl" = ${AggregationsDsl}
            "aggregations" = ${Aggregations}
            "sort" = ${Sort}
            "searchAfter" = ${SearchAfter}
            "filters" = ${Filters}
        }

        return $PSO
    }
}

<#
.SYNOPSIS

Convert from JSON to Search<PSCustomObject>

.DESCRIPTION

Convert from JSON to Search<PSCustomObject>

.PARAMETER Json

Json object

.OUTPUTS

Search<PSCustomObject>
#>

function ConvertFrom-JsonToSearch {
    Param(
        [AllowEmptyString()]
        [string]$Json
    )

    Process {
        'Converting JSON to PSCustomObject: PSSailpoint.V3 => Search' | Write-Debug
        $PSBoundParameters | Out-DebugParameter | Write-Debug

        $JsonParameters = ConvertFrom-Json -InputObject $Json

        # check if Json contains properties not defined in Search
        $AllProperties = ("indices", "queryType", "queryVersion", "query", "queryDsl", "textQuery", "typeAheadQuery", "includeNested", "queryResultFilter", "aggregationType", "aggregationsVersion", "aggregationsDsl", "aggregations", "sort", "searchAfter", "filters")
        foreach ($name in $JsonParameters.PsObject.Properties.Name) {
            if (!($AllProperties.Contains($name))) {
                throw "Error! JSON key '$name' not found in the properties: $($AllProperties)"
            }
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "indices"))) { #optional property not found
            $Indices = $null
        } else {
            $Indices = $JsonParameters.PSobject.Properties["indices"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "queryType"))) { #optional property not found
            $QueryType = $null
        } else {
            $QueryType = $JsonParameters.PSobject.Properties["queryType"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "queryVersion"))) { #optional property not found
            $QueryVersion = $null
        } else {
            $QueryVersion = $JsonParameters.PSobject.Properties["queryVersion"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "query"))) { #optional property not found
            $Query = $null
        } else {
            $Query = $JsonParameters.PSobject.Properties["query"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "queryDsl"))) { #optional property not found
            $QueryDsl = $null
        } else {
            $QueryDsl = $JsonParameters.PSobject.Properties["queryDsl"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "textQuery"))) { #optional property not found
            $TextQuery = $null
        } else {
            $TextQuery = $JsonParameters.PSobject.Properties["textQuery"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "typeAheadQuery"))) { #optional property not found
            $TypeAheadQuery = $null
        } else {
            $TypeAheadQuery = $JsonParameters.PSobject.Properties["typeAheadQuery"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "includeNested"))) { #optional property not found
            $IncludeNested = $null
        } else {
            $IncludeNested = $JsonParameters.PSobject.Properties["includeNested"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "queryResultFilter"))) { #optional property not found
            $QueryResultFilter = $null
        } else {
            $QueryResultFilter = $JsonParameters.PSobject.Properties["queryResultFilter"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "aggregationType"))) { #optional property not found
            $AggregationType = $null
        } else {
            $AggregationType = $JsonParameters.PSobject.Properties["aggregationType"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "aggregationsVersion"))) { #optional property not found
            $AggregationsVersion = $null
        } else {
            $AggregationsVersion = $JsonParameters.PSobject.Properties["aggregationsVersion"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "aggregationsDsl"))) { #optional property not found
            $AggregationsDsl = $null
        } else {
            $AggregationsDsl = $JsonParameters.PSobject.Properties["aggregationsDsl"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "aggregations"))) { #optional property not found
            $Aggregations = $null
        } else {
            $Aggregations = $JsonParameters.PSobject.Properties["aggregations"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "sort"))) { #optional property not found
            $Sort = $null
        } else {
            $Sort = $JsonParameters.PSobject.Properties["sort"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "searchAfter"))) { #optional property not found
            $SearchAfter = $null
        } else {
            $SearchAfter = $JsonParameters.PSobject.Properties["searchAfter"].value
        }

        if (!([bool]($JsonParameters.PSobject.Properties.name -match "filters"))) { #optional property not found
            $Filters = $null
        } else {
            $Filters = $JsonParameters.PSobject.Properties["filters"].value
        }

        $PSO = [PSCustomObject]@{
            "indices" = ${Indices}
            "queryType" = ${QueryType}
            "queryVersion" = ${QueryVersion}
            "query" = ${Query}
            "queryDsl" = ${QueryDsl}
            "textQuery" = ${TextQuery}
            "typeAheadQuery" = ${TypeAheadQuery}
            "includeNested" = ${IncludeNested}
            "queryResultFilter" = ${QueryResultFilter}
            "aggregationType" = ${AggregationType}
            "aggregationsVersion" = ${AggregationsVersion}
            "aggregationsDsl" = ${AggregationsDsl}
            "aggregations" = ${Aggregations}
            "sort" = ${Sort}
            "searchAfter" = ${SearchAfter}
            "filters" = ${Filters}
        }

        return $PSO
    }

}