Private/EAI/Build-EAISdtOverridePayload.ps1
|
function Build-EAISdtOverridePayload { [CmdletBinding(DefaultParameterSetName = 'Adjust')] param ( [Parameter(Mandatory)] $OriginalInstanceId, [Parameter(ParameterSetName = 'Skip')] [Switch]$Skip, [Parameter(ParameterSetName = 'Adjust')] $NewStartTime, [Parameter(ParameterSetName = 'Adjust')] $NewEndTime, [String]$Summary ) $originalId = if ($OriginalInstanceId -is [hashtable] -and $OriginalInstanceId.ContainsKey('scheduleId')) { $OriginalInstanceId } else { ConvertTo-EAISdtInstanceIdObject -InputObject $OriginalInstanceId } $payload = [ordered]@{ originalInstanceId = @{ scheduleId = $originalId.scheduleId startTime = $originalId.startTime } } if ($PSCmdlet.ParameterSetName -eq 'Skip') { $payload.status = 'SKIPPED' } else { if ($null -eq $NewStartTime -or $null -eq $NewEndTime) { throw 'NewStartTime and NewEndTime are required when adjusting an instance.' } $start = ConvertFrom-EAISdtApiTimestamp -Value $NewStartTime $end = ConvertFrom-EAISdtApiTimestamp -Value $NewEndTime if ($start -ge $end) { throw 'NewStartTime must be before NewEndTime.' } $payload.status = 'SCHEDULED' $payload.newStartTime = ConvertTo-EAISdtApiInstant -DateTime $NewStartTime $payload.newEndTime = ConvertTo-EAISdtApiInstant -DateTime $NewEndTime } if ($PSBoundParameters.ContainsKey('Summary')) { $payload.summary = $Summary } return [PSCustomObject]$payload } function ConvertTo-EAISdtOverrideRequestBody { [CmdletBinding()] param ( [Parameter(Mandatory)] [AllowEmptyCollection()] [Object[]]$Override ) if ($null -eq $Override) { return @() } $normalized = foreach ($item in $Override) { if ($item -is [hashtable] -or $item -is [PSCustomObject]) { $item } else { throw 'Each override must be a hashtable or PSCustomObject.' } } return @($normalized) } |