Public/Documents/Get-UKGFolder.ps1

function Get-UKGEmployeeFolder {
    <#
    .SYNOPSIS
        Gets employee folders from the UKG HR Service Delivery API.

    .DESCRIPTION
        Retrieves employee folder definitions by ID or lists all.

    .PARAMETER Id
        The unique identifier of the folder to retrieve.

    .PARAMETER All
        Retrieves all employee folders.

    .PARAMETER PerPage
        Number of results per page (1-100, default 25).

    .PARAMETER Cursor
        Pagination cursor for retrieving a specific page.

    .EXAMPLE
        Get-UKGEmployeeFolder -Id "folder123"

    .EXAMPLE
        Get-UKGEmployeeFolder -All

    .OUTPUTS
        UKG.Folder or array of UKG.Folder objects.
    #>

    [CmdletBinding(DefaultParameterSetName = 'ById')]
    [OutputType([PSCustomObject])]
    param(
        [Parameter(Mandatory, ParameterSetName = 'ById', ValueFromPipelineByPropertyName)]
        [ValidateNotNullOrEmpty()]
        [Alias('FolderId')]
        [string]$Id,

        [Parameter(ParameterSetName = 'List')]
        [switch]$All,

        [Parameter(ParameterSetName = 'List')]
        [ValidateRange(1, 100)]
        [int]$PerPage = 25,

        [Parameter(ParameterSetName = 'List')]
        [string]$Cursor
    )

    process {
        $queryParams = @{}

        switch ($PSCmdlet.ParameterSetName) {
            'ById' {
                $response = Invoke-UKGRequest -Endpoint "/employee_folders/$Id" -Method GET
                if ($response) {
                    $response.PSObject.TypeNames.Insert(0, 'UKG.Folder')
                }
                return $response
            }

            'List' {
                $queryParams['per_page'] = $PerPage
                if ($Cursor) { $queryParams['cursor'] = $Cursor }

                if ($All -and -not $Cursor) {
                    $allFolders = Get-UKGAllPages -Endpoint '/employee_folders' -Method GET -QueryParameters $queryParams
                    foreach ($folder in $allFolders) {
                        $folder.PSObject.TypeNames.Insert(0, 'UKG.Folder')
                    }
                    return $allFolders
                }
                else {
                    $response = Invoke-UKGRequest -Endpoint '/employee_folders' -Method GET -QueryParameters $queryParams -ReturnHeaders
                    if ($response.Data) {
                        foreach ($folder in $response.Data) {
                            $folder.PSObject.TypeNames.Insert(0, 'UKG.Folder')
                        }
                        return $response.Data
                    }
                }
            }
        }
    }
}

function Get-UKGCompanyFolder {
    <#
    .SYNOPSIS
        Gets company folders from the UKG HR Service Delivery API.

    .DESCRIPTION
        Retrieves company folder definitions by ID or lists all.

    .PARAMETER Id
        The unique identifier of the folder to retrieve.

    .PARAMETER All
        Retrieves all company folders.

    .PARAMETER PerPage
        Number of results per page (1-100, default 25).

    .PARAMETER Cursor
        Pagination cursor for retrieving a specific page.

    .EXAMPLE
        Get-UKGCompanyFolder -Id "folder123"

    .EXAMPLE
        Get-UKGCompanyFolder -All

    .OUTPUTS
        UKG.Folder or array of UKG.Folder objects.
    #>

    [CmdletBinding(DefaultParameterSetName = 'ById')]
    [OutputType([PSCustomObject])]
    param(
        [Parameter(Mandatory, ParameterSetName = 'ById', ValueFromPipelineByPropertyName)]
        [ValidateNotNullOrEmpty()]
        [Alias('FolderId')]
        [string]$Id,

        [Parameter(ParameterSetName = 'List')]
        [switch]$All,

        [Parameter(ParameterSetName = 'List')]
        [ValidateRange(1, 100)]
        [int]$PerPage = 25,

        [Parameter(ParameterSetName = 'List')]
        [string]$Cursor
    )

    process {
        $queryParams = @{}

        switch ($PSCmdlet.ParameterSetName) {
            'ById' {
                $response = Invoke-UKGRequest -Endpoint "/company_folders/$Id" -Method GET
                if ($response) {
                    $response.PSObject.TypeNames.Insert(0, 'UKG.Folder')
                }
                return $response
            }

            'List' {
                $queryParams['per_page'] = $PerPage
                if ($Cursor) { $queryParams['cursor'] = $Cursor }

                if ($All -and -not $Cursor) {
                    $allFolders = Get-UKGAllPages -Endpoint '/company_folders' -Method GET -QueryParameters $queryParams
                    foreach ($folder in $allFolders) {
                        $folder.PSObject.TypeNames.Insert(0, 'UKG.Folder')
                    }
                    return $allFolders
                }
                else {
                    $response = Invoke-UKGRequest -Endpoint '/company_folders' -Method GET -QueryParameters $queryParams -ReturnHeaders
                    if ($response.Data) {
                        foreach ($folder in $response.Data) {
                            $folder.PSObject.TypeNames.Insert(0, 'UKG.Folder')
                        }
                        return $response.Data
                    }
                }
            }
        }
    }
}

function Get-UKGRedirectionUrl {
    <#
    .SYNOPSIS
        Gets redirection URLs from the UKG HR Service Delivery API.

    .DESCRIPTION
        Retrieves URLs for redirecting users to specific resources in the UKG system.

    .PARAMETER ResourceType
        The type of resource to get a redirection URL for.

    .PARAMETER ResourceId
        The ID of the resource to get a redirection URL for.

    .PARAMETER QueryParameters
        Additional query parameters for the request.

    .EXAMPLE
        Get-UKGRedirectionUrl -ResourceType "employee" -ResourceId "emp123"

    .OUTPUTS
        String containing the redirection URL.
    #>

    [CmdletBinding()]
    [OutputType([string])]
    param(
        [Parameter()]
        [string]$ResourceType,

        [Parameter()]
        [string]$ResourceId,

        [Parameter()]
        [hashtable]$QueryParameters
    )

    $params = @{}
    if ($QueryParameters) {
        $params = $QueryParameters.Clone()
    }

    if ($ResourceType) { $params['resource_type'] = $ResourceType }
    if ($ResourceId) { $params['resource_id'] = $ResourceId }

    $response = Invoke-UKGRequest -Endpoint '/redirection_urls' -Method GET -QueryParameters $params

    return $response
}