Public/JobApplications/Get-FloRecruitJobApplication.ps1
|
function Get-FloRecruitJobApplication { <# .SYNOPSIS Retrieves job applications from FloRecruit. .DESCRIPTION Gets job applications with optional filtering by status, status bucket, and date range. Supports pagination and can retrieve all results automatically. .PARAMETER All Retrieve all job applications using automatic pagination. .PARAMETER Limit Maximum number of results to return per request (1-1000). .PARAMETER Cursor Pagination cursor for retrieving subsequent pages. .PARAMETER Status Filter by job application status (e.g., "Hired", "Rejected"). .PARAMETER StatusBucket Filter by status bucket: Applied, Offered, or Hired. .PARAMETER StatusStart Filter for applications with status date >= this date. .PARAMETER StatusEnd Filter for applications with status date <= this date. .EXAMPLE Get-FloRecruitJobApplication -All Retrieves all job applications. .EXAMPLE Get-FloRecruitJobApplication -StatusBucket Hired -Limit 100 Retrieves up to 100 hired applications. .EXAMPLE $start = Get-Date "2026-01-01" $end = Get-Date "2026-01-31" Get-FloRecruitJobApplication -StatusStart $start -StatusEnd $end Retrieves applications with status dates in January 2026. .EXAMPLE Get-FloRecruitJobApplication -Status "Offered" | Where-Object { $_.jobTitle -like "*Engineer*" } Retrieves offered applications and filters for engineering positions. .OUTPUTS Array of job application objects with PSTypeName 'FloRecruit.JobApplication'. #> [CmdletBinding(DefaultParameterSetName = 'List')] param( [Parameter(ParameterSetName = 'List')] [switch]$All, [Parameter(ParameterSetName = 'List')] [ValidateRange(1, 1000)] [int]$Limit, [Parameter(ParameterSetName = 'List')] [string]$Cursor, [Parameter()] [string]$Status, [Parameter()] [ValidateSet('Applied', 'Offered', 'Hired')] [string]$StatusBucket, [Parameter()] [datetime]$StatusStart, [Parameter()] [datetime]$StatusEnd ) # Build query parameters $queryParams = @{} if ($Limit) { $queryParams['limit'] = $Limit } if ($Cursor) { $queryParams['cursor'] = $Cursor } if ($Status) { $queryParams['job_application_status'] = $Status } if ($StatusBucket) { $queryParams['job_application_status_bucket'] = $StatusBucket } if ($StatusStart) { # Convert to ISO-8601 UTC format $queryParams['job_application_status_start'] = $StatusStart.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ') } if ($StatusEnd) { # Convert to ISO-8601 UTC format $queryParams['job_application_status_end'] = $StatusEnd.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ') } # Build endpoint $endpoint = "/$Script:FloRecruitApiVersion/job-applications" Write-Verbose "Retrieving job applications from endpoint: $endpoint" try { # Use auto-pagination if -All is specified if ($All) { Write-Verbose "Using automatic pagination to retrieve all results" $results = Get-FloRecruitAllPages -Endpoint $endpoint -QueryParameters $queryParams } else { # Single request $results = Invoke-FloRecruitRequest -Endpoint $endpoint -Method GET -QueryParameters $queryParams } # Handle response - could be array or object with results property $jobApplications = @() if ($results -is [array]) { $jobApplications = $results } elseif ($results.results) { $jobApplications = $results.results } elseif ($results.data) { $jobApplications = $results.data } else { # Single object $jobApplications = @($results) } # Add PSTypeName to each result for better formatting foreach ($app in $jobApplications) { if ($app -is [PSCustomObject]) { $app.PSObject.TypeNames.Insert(0, 'FloRecruit.JobApplication') } } Write-Verbose "Retrieved $($jobApplications.Count) job application(s)" return $jobApplications } catch { Write-Error "Failed to retrieve job applications: $_" throw } } |