internal/functions/Add-ARAHSwaggerPropertyToCollection.ps1

function Add-ARAHSwaggerPropertyToCollection {
    <#
    .SYNOPSIS
    Adds a new Swagger Properties to the existing collections.
 
    .DESCRIPTION
    Internal Helper Function for Swagger Function Generation.
    Adds new Swagger Properties to the existing collections.
 
    .PARAMETER PropertyObject
    The Swagger Property.
 
    .PARAMETER PropertyName
    The Name of the property
 
    .PARAMETER SwaggerObject
    The full Swagger Spec as a PSCustomObject.
 
    .PARAMETER SwaggerParams
    A HashTable with the already found parameters.
 
    .PARAMETER RequiredPoperties
    An array of the property names of all mandatory properties.
 
    .PARAMETER TargetHashMap
    The target HashMap for the property, most times a HashTable which represents the body parameter.
 
    .EXAMPLE
    An example will be missing.
 
    As the function is only used internally.
 
    .NOTES
    General notes
    #>

    [CmdletBinding()]
    param (
        $PropertyObject,
        $PropertyName,
        $SwaggerObject,
        $SwaggerParams,
        $RequiredPoperties,
        $TargetHashMap
    )
    $isReference = [bool]($PropertyObject.originalRef)
    if ($isReference) {
        Write-PSFMessage "$PropertyName=$($PropertyObject| ConvertTo-Json -WarningAction SilentlyContinue -depth 5)"
        Write-PSFMessage "isReference"
        $hash = Get-ARAHSwaggerBodyHashMap -SwaggerObject $SwaggerObject -SwaggerParams $SwaggerParams -OriginalRef ($PropertyObject.originalRef)
        Write-PSFMessage "hash=$($hash| ConvertTo-Json -WarningAction SilentlyContinue)"
        $TargetHashMap.add($PropertyName, $hash)
    }
    else {
        $mandatory = ($PropertyName -in $RequiredPoperties)
        switch -regex ($PropertyObject.type) {
            '(string)|(boolean)' {
                Write-PSFMessage "Simple Property Type: $($PropertyObject.type)" -Level Debug
                $TargetHashMap.$PropertyName = $PropertyObject.type
                $newParam = [PSCustomObject]@{
                    name            = $PropertyName
                    capitalizedName = ($PropertyName).substring(0, 1).toupper() + ($PropertyName).substring(1)
                    type            = $PropertyObject.type
                    description     = $PropertyObject.description
                    example         = $PropertyObject.example
                    enum            = $PropertyObject.enum
                    mandatory       = $mandatory
                }
                Write-PSFMessage "newParam=$($newParam| ConvertTo-Json -WarningAction SilentlyContinue)" -Level Debug
                $SwaggerParams.FunctionParameters += $newParam
            }
            'array' {
                Write-PSFMessage "$PropertyName is an array"
                Write-PSFMessage "$PropertyName=$($PropertyObject| ConvertTo-Json -WarningAction SilentlyContinue -depth 5)"
                Write-PSFMessage "isReference"
                $itemDefinition = Get-ARAHSwaggerBodyHashMap -SwaggerObject $SwaggerObject -SwaggerParams $SwaggerParams -OriginalRef ($PropertyObject.items.originalRef)
                Write-PSFMessage "itemDefinition=$($itemDefinition| ConvertTo-Json -WarningAction SilentlyContinue)"
                $TargetHashMap.add($PropertyName, @($itemDefinition))
            }
            Default {
                Write-PSFMessage "Unknown Property Type: $($PropertyObject.type)" -Level Warning
                Write-PSFMessage "PropertyObject=$($PropertyObject| ConvertTo-Json -WarningAction SilentlyContinue -depth 5)" -Level Warning
            }
        }
    }
}